生产环境 Nginx 优化全流程:性能、安全与稳定性一起抓
生产环境的 Nginx 优化不只是调性能,还要兼顾安全与稳定。本文按上线前、中、后三个阶段梳理配置要点,涵盖连接调优、访问控制、日志与故障排查,给出可直接落地的清单。
上线前:把默认配置当成隐患清单
刚装好的 Nginx,默认配置基本是「能跑就行」。生产环境第一件事是关掉版本号泄露:server_tokens off;,别让错误页告诉别人你用的什么版本。
然后是隐藏文件访问。很多人只配了 location,忘了 location ~ /\. 去拒绝 .git、.env 这类文件。这类疏忽被扫到,源码和密钥就全出去了。
请求体大小也要设:client_max_body_size 10m;,否则用户传个大文件直接 413,或者被恶意塞满磁盘。超时时间同理,client_body_timeout、client_header_timeout 都别用默认的 60s,按业务调到 10~15s 更合理。
运行中:限流、缓存与日志三件套
- 限流:limit_req_zone 按 IP 限速,limit_conn_zone 限制单 IP 并发连接。防爬虫和 CC 攻击,比事后封 IP 主动得多。
- 缓存:proxy_cache 把后端接口结果缓存几秒,能挡掉大量重复请求。静态资源用 expires 加长缓存时间,配合文件名 hash。
- 日志:access_log 别记所有请求,用 map 过滤掉静态资源和健康检查,日志体积能降一大半,排查时也更好找。
这套组合拳打下来,单机承载能力会明显提升。如果后端本身是重计算业务,前端再怎么优化也有限,这时候考虑把服务放到带宽和线路更好的机器上更划算,比如 圣何塞独立服务器,30Mbps 带宽跑中小型业务比较从容。
故障时:先看这三个地方
502 先查后端是否存活,curl 后端端口 最快。504 看 proxy_read_timeout 是不是太短,或者后端真的处理不过来。499 是客户端主动断开,多半是用户等不及,要回头看响应时间而不是 Nginx 本身。
error_log 的级别平时用 warn,排查时临时开到 info,但别一直开着,IO 会拖慢性能。reload 配置用 nginx -t 先测语法,再 nginx -s reload,比直接 restart 平滑。
最后,把上面这些整理成一个 checklist,每次上线对照一遍。优化不是一次性的动作,而是每次发布都要过的流程。