3 Nginx 配置
3 Nginx 配置
配置说明
TIP
Nginx 配置"就近原则":
如果某个指令在两个不同层级的块中出现,以较低层级配置为准。
配置文件结构
配置文件为nginx.conf
,其主要分为以下几块
- nginx.conf
- 全局块:配置影响 nginx 全局的指令。一般有运行 nginx 服务器的用户组,nginx 进程 pid 存放路径,日志存放路径,配置文件引入,允许生成 worker process 数等。
- events 块:配置影响 nginx 服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。
- http 块:可以嵌套多个 server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type 定义,日志自定义,是否使用 sendfile 传输文件,连接超时时间,单连接请求数等。
- http 全局块
- server 块:配置虚拟主机的相关参数,一个http中可以有多个server。
- server 全局块
- location 块:配置请求的路由,以及各种页面的处理情况。
详细配置可参考Nginx 配置详解
我们分小节对 nginx 的文件结构进行详细介绍。
1 配置运行 Nginx 服务器用户(组)
用于配置运行 Nginx 服务器用户(组)的指定是 user,其语法格式为:user user [group];
- user,指定可以运行 Nginx 服务器的用户
- group,可选项,指定可以运行 Nginx 服务器的用户组
TIP
如果希望所有用户都可以启动 Nginx 进程,有两种办法:
- 是将指令和注释掉:
# user [user] [group];
- 或者将用户(和用户组)设置为 nobody:
user nobody nobody;
PS: 在 Nginx 配置文件中,每一条指定配置都必须以分号结束。
2 配置允许生成的 worker process 数
略。
TIP
如线程池设计时,IO 密集型、计算密集型配置,以及为什么有的建议设置为 CPU 核数的倍数。
3 配置 Nginx 进程 PID 存放路径
略。
4 配置错误日志的存放路径
略。
5 配置文件的引入
Nginx 提供了 include 指令来完成配置文件的引入,其语法结构为:include file;
,其中,file 是要引入的配置文件,它支持相对路径。
6 设置网络连接的序列化
其只能在 event 块中进行配置,其语法结构为:accept_mutex on | off
,默认是开启状态,可以解决"惊群"的问题。
7 设置是否允许同时接受多个网络连接
其只能在 event 块中进行配置,其语法结构为:multi_accept on | off
,默认是关闭状态
8 事件驱动模型的选择
其只能在 event 块中进行配置,其语法结构为:use method;
,其中,method 可选择的内容有 select、poll、kqueue、rtsig、/dev/poll 以及 eventport。
9 配置最大连接数
其只能在 event 块中进行配置,其语法结构为:worker_connections number;
,默认值随版本变化。
TIP
这里的 number 不仅仅包括和前端用户建立的连接数,而是包括所有可能的连接数。另外,number 值不能大于操作系统支持打开的最大句柄数量。
10 定义 MIME-TYPE
MIME Type 是网络资源的媒体类型。Nginx 服务器作为 Web 服务器,必须能够识别前端请求的资源类型。
nginx 默认 MIME-TYPE 配置,其他说明略:
include mime.types;
default_type application/octet-stream;
11 自定义服务日志
略,其在 http 块中,一个示例可参考nginx 日志详解及自定义日志配置
12 配置允许 sendfile 方式传输文件
sendfile 是零拷贝知识,参考Nginx中sendfile的作用
13 配置连接超时事件
略。
14 配置单链接请求数上限
即用于限制用户通过某一连接向 Nginx 服务器发送请求的次数
15 配置网络监听
配置监听使用指令 listen,其配置使用可以比较复杂,但是我们一般使用时,相对比较简单,默认的设置为:listen *:80 | *:8000
,即监听所有 80 和 8000 端口。下面给出一些示例来说明 listen 的用法
listen 192.168.1.10:8000; #监听具体的ip和具体的端口上的连接
listen 192.168.1.10; #监听具体ip的所有端口连接
listen 8000; #监听具体端口上的所有IP连接,等同故意 listen *:8000
listen 192.168.1.10 default_server backlog=1024; #设置192.168.1.10的连接请求默认由此虚拟机处理,并且允许最多1024网络连接同时处于挂起状态
16 基于名称的虚拟主机配置
配置主机名称的指令为 server_name,其语法结构为:server_name name ...;
,对于 name 来说,可以只有一个名称,也可以有多个名称并列,之间用空格隔开。下面是一个简单的示例: server_name myserver.com www.myserver.com;
,在 name 中还可以使用通配符、正则表达式等。
17 基于 IP 的虚拟主机配置
略。简单描述下:Linux 操作系统支持 IP 别名的添加,可以将网卡设置为同时能够监听多个 IP 地址,再和类似基于名称的虚拟主机配置
的逻辑处理即可,只是域名改为了 ip。
18 配置 location 块
在 Nginx 的官方文档中定义的 location 的语法结构为:location [ = | ~ | ~* | ^~ ] uri {...}
=
:用标准 uri 前,要求请求字符串与 uri 严格匹配。如果已经匹配成功,就停止继续搜索并立即处理此请求。~
:用于表示 url 包含正则表达式,并且区分大小写,PS:如果 uri 包含正则表达式,就必须使用~
或者~*
标识。~*
:用于表示 url 包含正则表达式,并且不区分大小写。^~
:用于标准 uri 前,要求 Nginx 服务器找到标识 uri 和请求字符串匹配度最高的 location 后,立即使用此 location 处理请求,而不再使用 location 块中的正则 uri 和请求字符串做匹配。
19 配置请求的根目录
指令 root 就是用来配置这个根目录的,其语法结构为:root path;
其中,path 为 Nginx 服务器接收到请求以后查找资源的根目录路径。
这个指令的一个示例为:
location /data/ {
root /locationtest1;
}
当 location 块接收到"/data/index.htm"的请求时,将在 /locationtest1/data/ 目录下找到 index.htm 响应请求。
20 更改 location 的 URI
略。
21 设置网站的默认首页
略。示例:index index.my.html index.html;
。
22 设置网站的错误页面
略。示例:error_page 500 502 503 504 /50x.html;
。
23 基于 IP 配置 Nginx 的访问权限
allow 指令,用于设置允许访问 Nginx 的客户端 IP,语法结构为:allow address | CIDR | all;
- address,允许访问的客户端的 IP,不支持同时设置多个。如果有多个 IP 需要设置,需要重复使用 allow 指令。
- CIDR,允许访问的客户端的 CIDR 地址,例如 202.80.18.23/25,前面是 32 位IP地址,后面"/25"代表该 IP 地址中前 25 位是网络部分,其余位代表主机部分。
- all,代表允许所有客户端访问。
从 Nginx0.8.22 版本以后,该命令也支持 IPv6 地址,比如allow 2620:100:e000::8001
另一个指令是 deny,作用刚好和 allow 指令相反,它用于设置禁止访问 Nginx 的客户端 IP,语法结构为:deny address | CIDR | all;
TIP
deny 与 allow 指令的解析顺序?
location / {
deny 192.168.1.1;
allow 192.168.1.0/24;
deny all;
}
问:192.168.1.0/24 客户端能不能访问?
答:可以,从上至下按 deny 和 allow 的顺序解析,解析到 allow 时,允许访问,终止解析。
24 基于密码配置 Nginx 的访问权限
auth_basic 指令,用于开启或者关闭该认证功能,语法结构为:auth_basic string | off;
- string:开启该认证功能,并配置验证时的指示信息
- off:关闭该认证功能 其他略。
基础配置示例
略,其实一个个理解上述配置就差不多了,完整示例可以自行网络搜索参考
参考文献
- Nginx 配置详解
- nginx 日志详解及自定义日志配置
- [Nginx 高性能 Web 服务器详解]
- Nginx 部署多个 VUE 项目,根路径冲突问题解决