Nginx配置参数之main和events
这些 NGINX 配置参数偏底层、进阶,适用于高性能服务场景。作为 后端开发者了解这些配置,有助于优化部署和理解 NGINX 工作机制。
1 ✳️ 主配置块(global directives)
user nginx;
- 含义:指定 NGINX worker 进程运行的用户,通常为
nginx、www-data、nobody等低权限用户。 - 目的:提升安全性。
worker_processes auto;
- 含义:设置工作进程数量。
- auto:自动匹配 CPU 核心数,适合现代多核服务器。
- ✅ 推荐使用
auto,因为可以最大化 CPU 利用。
pid /opt/nginx/logs/nginx.pid;
- 含义:指定用于存储 NGINX 主进程 PID(进程 ID)的文件路径。
- 用途:用于脚本或系统服务管理 NGINX(如 reload, stop)。
worker_rlimit_nofile 12500;
- 含义:worker 能打开的最大文件描述符数。
- 重要性:如果连接数太多,可能导致「Too many open files」错误。
- ✅ 设置为高值可防止这种问题。
worker_rlimit_core 50M;
- 含义:单个 worker 的 core dump 文件(用于调试崩溃)的最大大小。
- 通常在调试阶段使用。
working_directory /opt/nginx/tmp;
- 含义:设置 core dump 产生的默认目录。
- ⚠️ 实际很少用,除非你要排查崩溃问题。
worker_cpu_affinity 0001 0010 0100 1000;
- 含义:绑定每个 worker 到特定 CPU 核。
0001表示绑定到 CPU0,0010到 CPU1,以此类推。- ✅ 高并发系统中,这有助于减少 CPU 争用,提高性能。
worker_priority -10;
- 含义:设置 worker 的 nice 值(进程优先级)。
- 值越小优先级越高,-10 意味着比普通进程更高的调度优先级。
- ⚠️ 需要管理员权限,提升性能但会影响其他进程。
worker_shutdown_timeout 5s;
- 含义:在 worker 停止时(如 reload),等待最多 5 秒处理完当前请求。
- ✅ 避免因 reload 导致请求中断。
timer_resolution 100ms;
- 含义:设置定时器精度。
- 默认较低精度会造成频繁系统调用,设置为
100ms减少 CPU 消耗。 - ⚠️ 精度越低,时间控制越精确但更耗性能。
daemon on;
- 含义:是否以守护进程(后台服务)方式运行。
- 默认是
on,设置为off可用于在调试或容器中运行。
lock_file logs/nginx.log;
- 含义:指定用于进程锁的文件(旧参数)。
- 现代系统中不常用,通常忽略即可。
error_log logs/error.log;
# error_log logs/error.log notice;
# error_log logs/error.log info;
- 含义:配置错误日志的路径和等级。
- 等级从高到低:
crit>error>warn>notice>info>debug - ✅ 在开发或测试阶段启用 info 或 debug,生产环境通常设置为
error。
2 ⚙️ events 块(与连接处理相关)
events {
worker_connections 17500;
accept_mutex on;
accept_mutex_delay 100ms;
multi_accept on;
}
worker_connections 17500;- 每个 worker 可并发连接的最大数。
- 理论最大连接数 =
worker_processes × worker_connections。 - ✅ 配合
ulimit -n一起设置,避免连接瓶颈。
accept_mutex on;- 启用互斥锁,避免多个 worker 同时抢 accept(接收连接)导致惊群(thundering herd)问题。
- ✅ 建议开启,尤其是在多核机器上。
accept_mutex_delay 100ms;- 如果
accept_mutex已被锁住,当前 worker 最多等待 100ms 后重试。
- 如果
multi_accept on;- 一旦接收到连接,尽量一次 accept 多个连接。
- ✅ 高并发优化选项,减少上下文切换。
3 ✅ 总结:这份配置适用于哪些场景?
适合:
- CPU 核心较多(4核或以上);
- 高并发 Web 接入或 Python API 服务;
- 希望最大化资源使用和减少延迟;
- 有调试需求(如 core dump);
- 后端使用 WSGI(如 gunicorn)或 ASGI(如 uvicorn)等结合 NGINX 做反向代理时作为入口优化。
user nginx;
worker_processes auto;
pid /opt/nginx/logs/nginx.pid;
worker_rlimit_nofile 12500;
worker_rlimit_core 50M;
working_directory /opt/nginx/tmp;
worker_cpu_affinity 0001 0010 0100 1000;
worker_priority -10;
worker_shutdown_timeout 5s;
timer_resolution 100ms;
daemon on;
lock_file logs/nginx.log;
error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
events {
worker_connections 17500;
accept_mutex on;
accept_mutex_delay 100ms;
multi_accept on;
}