Nginx高并发配置优化实战
Nginx以高性能著称,在合理配置下可以轻松处理数万并发连接。但默认配置是保守的,需要根据实际业务场景进行调优。本文分享Nginx在高并发场景下的配置优化经验。
运维与安全工作的价值,常常体现在「什么都没发生」上。「Nginx高并发配置优化实战」所涉及的监控告警与可观测体系,正是这种隐性价值的来源:体系健全时风平浪静,体系缺失时一次小问题就可能演变成大事故。
核心配置
worker_processes:设置为CPU核心数(auto)。每个worker是单进程,绑定一个CPU核心,避免上下文切换。
worker_connections:每个worker的最大连接数。默认768,建议调整为10000-50000。注意总连接数 = worker_processes × worker_connections。
use epoll:Linux下使用epoll事件模型,效率远高于select/poll。在events块中添加 use epoll;。
multi_accept on:允许一个worker一次接受所有新连接,而不是每次只接受一个。
缓冲区优化
client_body_buffer_size:客户端请求体的缓冲区大小。POST请求体小于这个值时不会写临时文件,建议设为128k。
client_max_body_size:允许的最大请求体大小。上传文件场景需要调大(如100m)。
proxy_buffer_size:代理响应的第一部分的缓冲区。如果后端返回的Header很大,需要调大这个值避免502错误。
proxy_buffers:代理响应的缓冲区数量和大小。如 proxy_buffers 8 32k;。
Keep-Alive优化
开启与后端的Keep-Alive连接,避免每次请求都建立新的TCP连接。配置 upstream 中 keepalive 64;,在 location 中设置 proxy_http_version 1.1; 和 proxy_set_header Connection "";。
缓存和压缩
开启gzip压缩:gzip on; gzip_types text/plain application/json text/css application/javascript;。文本类资源压缩后可减少60%-80%的传输量。
开启静态文件缓存:location ~* \.(jpg|png|css|js)$ { expires 30d; access_log off; }。静态文件直接由Nginx返回,不经过后端。
安全配置
隐藏版本号 server_tokens off;。限制请求速率 limit_req_zone。配置SSL时使用TLS 1.2+和强加密套件。设置 client_header_timeout 和 client_body_timeout 防止慢速攻击。
监控告警与可观测体系的体系化思路
与其追求单点工具的极致配置,不如先保证覆盖面:关键资产是否都在监控之内、重要操作是否都有审计、对外暴露面是否都经过评估。覆盖面完整之后,再谈深度优化才有意义。
体系化的另一个好处是可传承:不依赖某个人的记忆,而是依赖流程与清单,团队整体水位才会稳定提升。
一份可执行的日常清单
- 暴露面盘点:定期梳理对外端口与服务,关闭不必要的开放。
- 权限最小化:账号与密钥按最小权限分配,定期回收闲置权限。
- 告警治理:清理长期无人响应的告警,保证留下的告警都值得处理。
- 预案演练:对高频故障场景准备处置预案并定期演练。
清单不复杂,难在坚持;而监控告警与可观测体系的差距,恰恰体现在坚持上。
