Nginx生产配置应分三类:资源调度(worker_processes auto、worker_rlimit_nofile等)、传输效率(sendfile on、epoll、keepalive_timeout等)、安全与可观测性(server_tokens off、安全响应头、IP白名单、结构化日志)。

直接用一套结构清晰、分层明确、可验证的配置模板,比零散堆参数更可靠。核心是把配置划为三类:资源调度、传输效率、安全与可观测性,并同步校准系统限制。
资源调度:匹配硬件,稳住并发底座
worker_processes auto 是生产首选,让 Nginx 自动识别 CPU 核心数;混部或容器环境可设为 2 或 4 避免争抢。单进程连接数建议设为 4096~65535,但必须同步调高系统级文件描述符上限:
- 临时生效:ulimit -n 65535
- 永久生效:在 /etc/security/limits.conf 中添加
nginx soft nofile 1000000
nginx hard nofile 1000000 - 补充配置:worker_rlimit_nofile 1000000 和 worker_cpu_affinity auto(Linux 下自动绑定 CPU,降低上下文切换损耗)
传输效率:减少拷贝、压缩延迟、复用连接
关键组合不能拆开用:sendfile on 启用内核零拷贝;tcp_nopush on 让 sendfile 批量发包;tcp_nodelay on 确保小响应不等待。事件模型必须选 epoll,再配 multi_accept on 提升 accept 效率:
- use epoll;
- multi_accept on;
- keepalive_timeout 30s;(动态服务建议 15~30s,静态资源可延长)
- keepalive_requests 1000;(单连接最大请求数,避免频繁建连)
安全闭环:从隐藏指纹到访问控制全覆盖
server_tokens off 是基础项,但仅关版本号不够。建议叠加防护头与访问控制:
- add_header X-Content-Type-Options "nosniff" always;
- add_header X-Frame-Options "SAMEORIGIN" always;
- add_header X-XSS-Protection "1; mode=block" always;
- 敏感路径如 /admin 加 IP 白名单:allow 10.10.0.0/16; deny all;
- 禁用危险方法:limit_except GET HEAD POST { deny all; }
自动化审计:日志可解析、响应可校验、变更可追溯
日志不是存下来就行,要能被 ELK/Loki 直接消费。自定义 log_format 必须含耗时字段:
- log_format main '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" rt=$request_time uct=$upstream_connect_time urt=$upstream_response_time';
- 每次修改后执行 nginx -t 验证语法;上线前用 curl 或 wrk 压测,检查响应头是否含预期安全字段、耗时是否合理
- 敏感接口建议加 Token 验证,用 map 指令做高效鉴权,比 if 更稳定











