3 Nginx 配置

felix.shao2025-02-18

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 配置详解open in new window
 我们分小节对 nginx 的文件结构进行详细介绍。

1 配置运行 Nginx 服务器用户(组)

 用于配置运行 Nginx 服务器用户(组)的指定是 user,其语法格式为:
user user [group];

  • user,指定可以运行 Nginx 服务器的用户
  • group,可选项,指定可以运行 Nginx 服务器的用户组

TIP

 如果希望所有用户都可以启动 Nginx 进程,有两种办法:

  1. 是将指令和注释掉:# user [user] [group];
  2. 或者将用户(和用户组)设置为 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 日志详解及自定义日志配置open in new window

12 配置允许 sendfile 方式传输文件

 sendfile 是零拷贝知识,参考Nginx中sendfile的作用open in new window

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:关闭该认证功能  其他略。

基础配置示例

 略,其实一个个理解上述配置就差不多了,完整示例可以自行网络搜索参考

参考文献

Last Updated 2/18/2025, 5:05:12 PM