前端 10 问之 Nginx (第一篇)
1、nginx 的作用
静态资源服务
- 浏览器缓存
- 防盗链
- 资源压缩
- 限流
代理服务
- 正向代理
- 反向代理
- 负载均衡
2、nginx 和 apache 的区别?
- 轻量级,同样起
web
服务,比apache
占用更少的内存及资源 - 抗并发,
nginx
处理请求是异步非阻塞的,而apache
则是阻塞型的,在高并发下nginx
能保持低资源低消耗高性能 - 高度模块化的设计,编写模块相对简单
最核心的区别在于 apache
是同步多进程模型,一个连接对应一个进程;nginx
是异步的 epoll 模型,多个连接(万级别)可以对应一个进程。
3、nginx 配置文件的一般结构
|
|
4、都说 nginx 性能高,为什么 nginx 性能这么高?
因为 nginx 是用来异步非阻塞事件处理机制:运用了 epoll 模型,通过异步、非阻塞的方式来处理请求
5、如何重启?
|
|
6、nginx 校验配置文件是否正确
校验默认配置文件:
|
|
校验指定配置文件:
|
|
7、alias 与 root 的区别?
问题:
在当前的 web server 的根路径下,需要配置 /website
来匹配系统路径下 /usr/my-website/dist
中的静态资源文件,需要如何配置?
回答:
可以使用别名来配置:
|
|
上面的配置,很多人会将 alias
配置成 root
,这样会有问题,这会导致网络请求 /website
下的资源文件时,实际请求的是 /usr/my-website/dist/website
路径下的资源文件,这会导致找不到文件而报 404。
所以这里需要使用别名来配置,换成 alias
时,请求 /website
下的资源文件时,可以正确请求到 /usr/my-website/dist
下的资源文件。
相关链接: stackoverflow question
8、server_name 有什么作用?
在实际的生产环境,公网 ip 是很有限的,经常会出现一个 ip 多个业务系统公用,这时候就可以用 server_name
来匹配 http request header 里 host 字段,来实现同 ip 不同域名的需求。
例如:domain.com
和它的二级域名 demo.domain.com
配置在同一个公网 ip 上,这时候可以通过 server_name
来提供分别提供 http 服务:
|
|
上面的配置请求 domain.com
会返回 hello,请求 demo.domain.com
会返回 world。
9、nginx location 匹配规则
修饰符类型有下面 4 种:
=
开头表示精确匹配,命中后不再进行后续的查找^~
开头表示uri
以某个常规字符串开头,不是正则匹配,命中后不再进行后续的查找~
开头表示区分大小写的正则匹配~*
开头表示不区分大小写的正则匹配
当有多条 location 规则时,nginx 有一套比较复杂的规则,优先级如下:
location =
> location 完整路径
> location ^~ 路径前缀
> location ~*/~ 正则
> location 路径前缀
> /
- 精确匹配
=
,命中后使用它的配置。 - 查找是否有不带修饰符的完整匹配,如何命中,使用它的配置。
- 前缀匹配
^~
,命中后不再进行其他低优先级匹配,在精确匹配中选择最长匹配的项并使用它的配置。 - 按文件中顺序的正则匹配
~
或~*
,如果匹配则停止查找,使用命中的配置。 - 匹配不带任何修饰的前缀匹配,选择最长匹配的项并使用它的配置
相关链接: Nginx 匹配规则 彻底弄懂 Nginx location 匹配
10、nginx 常见优化方式
1、CPU 内核亲容
|
|
2、每个 worker 最大并发连接数
|
|
3、使用零拷贝
|
|
4、优化日志打印
减少或消除不必要的日志记录,可以节省服务器上的磁盘存储、 CPU 和 I/O 操作。
(1)、禁用对页面资源请求的日志记录
|
|
(2)、禁用成功请求的日志记录
(3)、使用缓冲最小化 I/O 操作
5、开启 gzip 压缩
|
|