前端 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 压缩
|
|