Back to Blogs
nginx
nginx配置

Nginx配置参数之main和events

Soloman
2019-10-17

Nginx配置参数之main和events

这些 NGINX 配置参数偏底层、进阶,适用于高性能服务场景。作为 后端开发者了解这些配置,有助于优化部署和理解 NGINX 工作机制。


1 ✳️ 主配置块(global directives)

user  nginx;
  • 含义:指定 NGINX worker 进程运行的用户,通常为 nginxwww-datanobody 等低权限用户。
  • 目的:提升安全性。

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;
}