2026-09-17 04:43 1004 次浏览

别等被打挂才想起改配置:一份能落地的Nginx性能与安全加固清单

从worker进程、连接数到超时与压缩,再到限流、防爬与请求体限制,本文用可复制的配置片段讲清Nginx在生产环境里怎么调才能既快又稳,并给出上线前后的验证方法。

很多站点的Nginx配置从装上那天起就没动过,直到某天CPU飙满、连接被占满或者被一波CC打得打不开,才回头翻文档。其实Nginx的优化和安全加固并不玄学,关键是知道每个参数在解决什么问题,以及改完之后怎么验证。

先把并发能力放出来,别让默认值拖后腿

默认配置下,worker进程数和连接数往往偏保守。一个常见组合是按CPU核数设置worker_processes,并适当提高worker_connections。如果前面还有负载均衡或CDN回源,记得把连接数预留出余量。

  • worker_processes auto; 让Nginx自己按核数分配。
  • worker_connections 10240; 单进程可处理的连接上限,需结合系统ulimit调整。
  • multi_accept on; 一次接受多个新连接,高并发下更顺。

改完别只看配置是否报错,用ab或wrk压一轮,对比QPS和错误率。如果连接数上去了但CPU单核跑满,说明瓶颈在别处,比如后端响应慢或磁盘IO。

超时和压缩:省资源也省用户等待

超时设置太短会误杀慢请求,太长会让空闲连接占着资源。静态资源站和API站的策略不一样。一般把keepalive_timeout设到30到65秒之间,client_body_timeout和send_timeout按业务容忍度给10到60秒。压缩方面,gzip对文本类资源收益明显,但不要对图片和视频再压一遍。

  • keepalive_timeout 60; 复用连接,减少握手开销。
  • gzip on; gzip_types text/css application/javascript application/json; 只压该压的。
  • gzip_min_length 1024; 太小的文件压缩反而浪费CPU。

如果站点面向海外用户,回源链路的稳定性比本地参数更重要。像香港自营物理服务器(50M)⑥这类直连线路,能减少跨境抖动带来的超时误判。

安全加固不是加个防火墙就完事

Nginx层面的安全加固,重点在限制异常请求和隐藏敏感信息。限流能挡住一部分CC和爬虫,请求体限制能防止大文件拖垮后端,版本号隐藏能减少被针对性扫描的概率。

  • limit_req_zone 按IP做请求频率限制,配合burst和nodelay平滑放行。
  • client_max_body_size 10m; 按业务需要设置,别默认无限制。
  • server_tokens off; 不暴露具体版本号。
  • 对管理后台、上传接口单独加访问控制,不要全站一个规则。

限流阈值要结合真实流量调,设太严会误伤正常用户,设太松等于没设。建议先开log_only模式观察一段时间,再切到拦截。

上线前做一次回归,比事后救火便宜

配置改完至少做三件事:nginx -t检查语法,reload而不是restart减少中断,压测对比改前改后的响应时间和错误率。安全规则上线后,观察日志里403和429的比例,如果突然飙升,先确认是不是自己规则写错了。

如果业务本身容易遇到DDoS或大流量冲击,单靠Nginx限流不够,前端还需要有清洗能力的节点。这时候可以考虑带防护的独立服务器,比如美国洛杉矶高防服务器39,把攻击流量挡在边缘,源站只处理正常请求。配置优化和基础设施选型配合起来,效果才稳。