1. Nginx 配置文件结构
Nginx 的主配置文件是 nginx.conf
,通常位于 /etc/nginx/nginx.conf 或 /usr/local/nginx/conf/nginx.conf。该文件由以下几个主要部分组成:
1.1、全局块
什么是全局块?
全局块是 Nginx 配置文件 nginx.conf
中最外层的一组指令,位于文件开头到 events
块之间。这些指令影响 Nginx 服务器的整体运行,例如指定运行 Nginx 进程的用户、设置 worker 进程的数量、定义错误日志等。
全局块中常用的指令:
-
user
: 指定运行 Nginx worker 进程的用户和用户组。默认情况下,Nginx worker 进程以nobody
用户运行。为了安全起见,建议创建一个专门的用户和用户组来运行 Nginx。- 语法:
user user [group];
- 示例:
user nginx nginx;
(使用 nginx 用户和 nginx 用户组)
- 语法:
-
worker_processes
: 设置 worker 进程的数量。通常设置为 CPU 核心数,以充分利用多核 CPU 的性能。如果设置为auto
,Nginx 会自动检测 CPU 核心数。- 语法:
worker_processes number | auto;
- 示例:
worker_processes 4;
(使用 4 个 worker 进程) - 示例:
worker_processes auto;
(自动检测 CPU 核心数)
- 语法:
-
pid
: 指定 Nginx 主进程的 PID 文件的存放路径。PID 文件用于存储 Nginx 主进程的进程 ID,方便管理和控制 Nginx。- 语法:
pid path;
- 示例:
pid /var/run/nginx.pid;
- 语法:
-
error_log
: 指定错误日志的存放路径和日志级别。错误日志记录了 Nginx 运行过程中出现的错误和警告信息,对于排查问题非常重要。- 语法:
error_log path level;
- 级别:
debug
、info
、notice
、warn
、error
、crit
、alert
、emerg
,级别越高,记录的信息越少。 - 示例:
error_log /var/log/nginx/error.log error;
- 语法:
-
worker_rlimit_nofile
: 设置 worker 进程可以打开的最大文件描述符数量。这对于高并发的服务器非常重要,可以避免 "Too many open files" 错误。- 语法:
worker_rlimit_nofile number;
- 示例:
worker_rlimit_nofile 65535;
- 语法:
-
worker_rlimit_core
: 设置 worker 进程的 core dump 文件大小限制。core dump 文件包含了程序崩溃时的内存状态,可以用于调试。- 语法:
worker_rlimit_core size;
- 示例:
worker_rlimit_core 512M;
- 语法:
-
include
: 用于包含其他配置文件,方便模块化管理。可以将不同的配置项放在不同的文件中,然后使用include
指令将其包含到主配置文件中。- 语法:
include path;
- 示例:
include /etc/nginx/conf.d/*.conf;
(包含conf.d
目录下所有以.conf
结尾的文件)
- 语法:
-
daemon
: 设置 Nginx 是否以守护进程方式运行。默认情况下,Nginx 以守护进程方式运行。- 语法:
daemon on | off;
- 示例:
daemon off;
(在前台运行 Nginx,通常用于调试)
- 语法:
全局块示例:
user nginx nginx; # 使用 nginx 用户和 nginx 用户组
worker_processes auto; # 自动检测 CPU 核心数
pid /var/run/nginx.pid; # PID 文件路径
error_log /var/log/nginx/error.log error; # 错误日志路径和级别
worker_rlimit_nofile 65535; # worker 进程最大文件描述符数量
worker_rlimit_core 0; # 关闭 core dump
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
# ... 其他 HTTP 配置 ...
}
示例解释:
- Nginx worker 进程以
nginx
用户和nginx
用户组运行。 - worker 进程数量根据 CPU 核心数自动调整。
- PID 文件保存在
/var/run/nginx.pid
。 - 错误日志记录在
/var/log/nginx/error.log
,日志级别为error
。 - worker 进程最多可以打开 65535 个文件描述符。
- 关闭 core dump。
events
块和http
块中包含其他配置。
通过合理配置全局块中的指令,可以有效地管理和优化 Nginx 服务器的性能和安全性。
1.2、events
块
什么是 events
块?
events
块用于配置影响 Nginx 服务器或与用户的网络连接的指令。它位于全局块之后,http
块之前。events
块主要负责处理网络事件,例如客户端连接的接收、读写等操作。
events
块中常用的指令:
-
worker_connections
: 设置每个 worker 进程可以处理的最大并发连接数。这是events
块中最关键的指令之一。需要根据服务器的硬件资源和预期的并发量进行合理设置。- 语法:
worker_connections number;
- 示例:
worker_connections 1024;
(每个 worker 进程最多处理 1024 个连接)
- 语法:
-
use
: 指定 Nginx 使用的事件驱动模型。不同的操作系统支持不同的事件驱动模型。- 语法:
use method;
- 常用方法:
epoll
:Linux 系统下性能最佳的事件驱动模型,也是 Nginx 在 Linux 下的默认选择。kqueue
:FreeBSD 和 macOS 系统下性能较好的事件驱动模型。select
和poll
:传统的事件驱动模型,性能相对较差,通常在没有epoll
或kqueue
的情况下使用。rtsig
: 实时信号,较少使用。/dev/poll
: Solaris 系统使用。eventport
: Solaris 10 以上版本使用。
- 示例:
use epoll;
- 语法:
-