一、进程与用户模型
user nginx nginx; # Worker 进程的用户与组
worker_processes auto; # 自动检测并与 CPU 核心数一致
worker_cpu_affinity auto; # 自动把 Worker 绑定到可用 CPU
worker_priority -5; # 提高进程调度优先级
master_process on; # 启用主进程管理 Worker
pid /var/run/nginx.pid;
worker_processes auto
:最佳起点,自动按 CPU 核心创建 Worker。worker_cpu_affinity auto
:绑定时减少调度抖动、提高缓存命中。worker_priority
:在资源紧张时,适当提升或降低 Worker 优先级。
二、错误日志与调试
error_log /var/log/nginx/error.log info;
# debug 级别需要编译时开启 --with-debug
# 单独为某些客户端启用调试
events {
debug_connection 192.168.1.0/24;
}
debug_points abort; # 出现内部错误时生成 core dump
- 日志级别:生产环境一般用
warn
或error
;开发或定位问题时用info
或debug
。 debug_connection
:只为特定 IP 打开 Debug,避免日志炸裂。
三、文件 & 模块加载
include mime.types; # 拆分配置文件,保持清晰
load_module modules/ngx_http_js_module.so; # 动态加载扩展
env TZ; # 保留系统环境变量(如时区)
working_directory /var/core; # core dump 写入目录
lock_file /var/lock/nginx.lock; # accept_mutex 等锁文件前缀
- 模块动态化:新功能不重启主程序,只需 reload。
- 分层 include:按功能(http、stream、server)组织目录,易于管理。
四、连接处理:events
块
events {
worker_connections 4096; # 每个 Worker 最多 4096 个并发连接
multi_accept on; # 一次性 accept 所有新连接
accept_mutex on; # Worker 轮流对新连接加锁
accept_mutex_delay 200ms; # 轮换延迟
use epoll; # Linux 上首选 epoll
pcre_jit on; # 正则高吞吐场景下开启 JIT
worker_aio_requests 64; # epoll + AIO 并发 I/O 数
}
worker_connections
与worker_processes
的乘积决定最大并发。multi_accept on
:高并发下让 Worker 一次处理全部排队连接。accept_mutex
:低并发场景避免 thundering herd(惊群)问题。
五、线程池与定时器
thread_pool default threads=32 max_queue=65536; # 文件 I/O 多线程
timer_resolution 50ms; # 降低定时器系统调用频率,减少开销
thread_pool
:开启带sendfile
、aio threads
等特性时,避免 Worker 被阻塞。timer_resolution
:批量定时器触发,减少gettimeofday()
调用。
六、SSL/TLS 引擎与对象继承
ssl_engine auto; # 硬件加速或软件自动
ssl_object_cache_inheritable on; # reload 时复用证书/私钥
- 对象继承:平滑 reload 不会因频繁读取证书文件而影响性能。
七、资源限制
worker_rlimit_nofile 65535; # 增大文件描述符上限
worker_rlimit_core 4G; # 核心文件大小上限
worker_shutdown_timeout 10s; # graceful shutdown 超时
- 生产环境务必配合系统
ulimit -n
提升 FD 数,避免“too many open files”。 - 设置
worker_shutdown_timeout
保证优雅关闭,避免流量中断。
八、环境变量与安全
env PERL5LIB=/opt/perl/modules; # 某些模块依赖外部环境
env OPENSSL_ALLOW_PROXY_CERTS=1; # 控制 OpenSSL 行为
- 最小化环境暴露:只保留必要变量,防止泄露敏感信息。
九、全局与子上下文
main
:worker_processes
、error_log
、load_module
、env
events
:并发连接、锁、方法选择http
/stream
:各自业务层指令server
/location
:七层路由与反向代理
通过层级化、模块化配置,既保持了灵活性,也保证了安全与性能。
十、总结
NGINX 核心指令可谓 “武器库” :只需合理配置进程数、连接数、日志级别与 I/O 模式,就能在不同场景下轻松应对千兆流量、海量并发、SSL 加密等挑战。理解它们的配合与底层实现,便可打造出稳健、灵活、可观测的高性能 HTTP 服务。