恩威信息网IT运维避坑:Nginx配置中5个高频陷阱与排查命令
做IT运维这几年,最怕的不是业务流量暴增,而是那些藏在配置文件里的小坑。尤其是在恩威信息网这类信息聚合站点,服务器一旦出现502或慢响应,影响的是整站访客体验。今天复盘几个Nginx/Apache配置里反复踩过的坑,每个都附上排查命令和日志特征,希望能帮你少走弯路。
坑一:反向代理缓存不命中导致后端雪崩
现象:某天恩威信息网首页响应时间从200ms飙到5s,后端CPU打满。
排查:先看Nginx日志,发现大量upstream timed out (110: Connection timed out)。用curl -I https://enwei.com/检查返回头,发现X-Cache: MISS。
原因:缓存配置里proxy_cache_path的inactive参数设成了1m,导致缓存1分钟未命中就被清理,热点内容反复回源。
修复:将inactive=1m改为inactive=60m,同时加上proxy_cache_valid 200 1h。修改后观察X-Cache: HIT比例从30%升到92%。
坑二:worker_connections估算失误导致连接拒绝
现象:下午高峰期用户反馈“连接被重置”,netstat -an | grep :80 | wc -l显示连接数已到3000。
排查:查看/var/log/nginx/error.log,出现worker_connections are not enough。默认配置worker_connections 1024,而服务器只开了4个worker进程,最大并发仅4096。
修复:根据业务峰值估算,将worker_connections提到4096,同时检查worker_rlimit_nofile是否调高到65535。修改后连接数瓶颈解除。
检查点:可以用ab -n 10000 -c 500 http://enwei.com/模拟压测,观察是否出现apr_socket_recv: Connection reset by peer。
坑三:日志文件未轮转撑爆磁盘
现象:某天服务器SSH登录缓慢,df -h发现根分区使用率100%。
排查:du -sh /var/log/nginx/*.log显示access.log已达12GB。默认logrotate按天轮转,但未配置压缩和保留份数。
修复:在/etc/logrotate.d/nginx里添加compress和rotate 30,设置daily轮转并保留30天。执行logrotate -vf /etc/logrotate.conf立即生效。
预防:监控磁盘使用率,当/var/log超过80%时告警。
坑四:SSL证书配置遗漏中间证书链
现象:恩威信息网在部分老旧浏览器(如Android 4.4)上提示“证书错误”。
排查:用openssl s_client -connect enwei.com:443 -showcerts检查,发现服务器只发了叶证书,未发送中间证书。
原因:从CA下载的证书包通常包含fullchain.pem和privkey.pem,但有人误将cert.pem(仅叶证书)配到了ssl_certificate。
修复:正确配置为ssl_certificate /etc/ssl/certs/fullchain.pem;。验证命令:openssl verify -CAfile ca-bundle.crt fullchain.pem应返回OK。
坑五:keepalive_timeout设置过长导致连接堆积
现象:高峰期ss -s显示TIME_WAIT状态连接超过10000个,新连接建立缓慢。
排查:grep keepalive /etc/nginx/nginx.conf发现keepalive_timeout 300,即空闲连接保持5分钟。
修复:将keepalive_timeout改为65,并启用keepalive_requests 100(单连接最多处理100个请求后关闭)。改后TIME_WAIT数量降到2000左右。
检查清单:
- 确认
proxy_cache_path的inactive值是否合理(建议30-60m) - 检查
worker_connections是否匹配ulimit -n值 - 运行
logrotate -d验证日志轮转配置 - 用
openssl s_client检查完整证书链 - 监控
ss -tan | grep TIME_WAIT | wc -l是否异常
FAQ
Q:Nginx出现502 Bad Gateway怎么快速定位?
A:先看error.log中是否有connect() failed (111: Connection refused),确认后端服务是否存活;再用curl -I http://127.0.0.1:8080测试后端端口是否响应。
Q:怎么确认当前配置是否有语法错误?
A:执行nginx -t,如果输出syntax is ok和test is successful则无误。
Q:Apache配置类似场景有什么不同?
A:Apache用KeepAliveTimeout替代keepalive_timeout,用Logrotate方式一致,但连接数限制需调整MaxRequestWorkers。
以上5个坑是恩威信息网运维中真实踩过的,排查思路和命令都亲测有效。建议每周做一次配置巡检,用检查清单逐项过一遍,能避免大部分线上故障。
声明:该信息由用户发布,真实性以及合法性由发布人负责,本站不会介入任何形式的担保!