1、nginx 的作用
静态资源服务
- 浏览器缓存
- 防盗链
- 资源压缩
- 限流
代理服务
- 正向代理
- 反向代理
- 负载均衡
2、nginx 和 apache 的区别?
- 轻量级,同样起
web
服务,比apache
占用更少的内存及资源 - 抗并发,
nginx
处理请求是异步非阻塞的,而apache
则是阻塞型的,在高并发下nginx
能保持低资源低消耗高性能 - 高度模块化的设计,编写模块相对简单
最核心的区别在于 apache
是同步多进程模型,一个连接对应一个进程;nginx
是异步的 epoll 模型,多个连接(万级别)可以对应一个进程。
3、nginx 配置文件的一般结构
worker_processes 1; # worker进程的数量
events { # 事件区块开始
worker_connections 1024; # 每个worker进程支持的最大连接数
}
http { # HTTP 区块开始
server { # 第一个Server区块开始,表示一个独立的虚拟主机站点
listen 80; # 提供服务的端口,默认80
server_name localhost; # 提供服务的域名主机名
location / { # 第一个location区块开始
root htm; # 站点的根目录,相当于Nginx的安装目录
index index.html index.htm; # 默认的首页文件,多个用空格分开
} # 第一个location区块结果
}
}
4、都说 nginx 性能高,为什么 nginx 性能这么高?
因为 nginx 是用来异步非阻塞事件处理机制:运用了 epoll 模型,通过异步、非阻塞的方式来处理请求
5、如何重启?
nginx -s reload
6、nginx 校验配置文件是否正确
校验默认配置文件:
nginx -t
# out:
# nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
# nginx: configuration file /etc/nginx/nginx.conf test is successful
校验指定配置文件:
nginx -t -c [config-path]
7、alias 与 root 的区别?
问题:
在当前的 web server 的根路径下,需要配置 /website
来匹配系统路径下 /usr/my-website/dist
中的静态资源文件,需要如何配置?
回答:
可以使用别名来配置:
location /website {
alias /usr/my-website/dist;
index index.html index.htm;
}
上面的配置,很多人会将 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 服务:
http {
server {
listen 80;
server_name domain.com;
return 200 hello;
}
server {
listen 80;
server_name demo.domain.com;
return 200 world;
}
}
上面的配置请求 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内核亲容
worker_processes 16;
2、每个worker最大并发连接数
events {
use epoll;
worker_connections 10240;
}
3、使用零拷贝
sendfile on;
4、优化日志打印
减少或消除不必要的日志记录,可以节省服务器上的磁盘存储、 CPU 和 I/O 操作。
(1)、禁用对页面资源请求的日志记录
location ~* .(?:jpg|jpeg|gif|png|ico|woff2|js|css)$ {
access_log off;
}
(2)、禁用成功请求的日志记录
(3)、使用缓冲最小化 I/O 操作
5、开启 gzip 压缩
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_comp_level 5;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript application/vnd.ms-fontobject application/x-font-ttf font/opentype image/svg+xml image/x-icon;