centos nginx故障排查常见方法
导读:CentOS 上 Nginx 故障排查常见方法与步骤 一 快速定位流程 检查安装与运行状态:使用 nginx -v 确认版本;whereis nginx 查看二进制与配置路径;systemctl status nginx 或 ps -ef...
CentOS 上 Nginx 故障排查常见方法与步骤
一 快速定位流程
- 检查安装与运行状态:使用 nginx -v 确认版本;whereis nginx 查看二进制与配置路径;systemctl status nginx 或 ps -ef | grep nginx 确认是否运行。若未运行,优先执行 nginx -t 验证配置语法。
- 查看错误日志:实时跟踪 /var/log/nginx/error.log,优先从最新报错入手(如端口占用、权限拒绝、上游超时等)。
- 验证端口与连通性:用 ss -tulnp | grep :80 或 netstat -tulnp | grep :80 检查 80/443 是否被占用;必要时 kill -9 释放端口或调整 listen 端口。
- 配置与模块核对:执行 nginx -V 查看编译参数与已启用模块;必要时在 /etc/nginx/nginx.conf 或 /etc/nginx/conf.d/ 中检查 load_module 指令是否加载动态模块。
- 外部连通性:从本机与远端分别 curl -I http://服务器IP/ 验证访问;若仅外网不通,排查 firewall-cmd 与云安全组策略。
二 常见故障与处理要点
- 端口被占用:日志出现 bind() to 0.0.0.0:80 failed (98: Address already in use)。处理:查占用进程并终止,或调整 listen 端口;重启服务。
- 权限被拒绝:日志出现 Permission denied。处理:确认 Nginx 工作用户(如 nginx)对网站目录与日志目录具备读取权限;必要时 chown/chmod 修正;若启用 SELinux,使用 chcon -R -t httpd_sys_content_t /var/www/html 修正上下文,或临时 setenforce 0 验证。
- 配置语法错误:执行 nginx -t 定位行号与文件,修正后重载。
- 服务未启动或 PID 文件异常:重启后执行 nginx -s reload 报 invalid PID number “” in “/run/nginx.pid”,先以 nginx -c /etc/nginx/nginx.conf 指定配置启动,再 reload。
- 反向代理 502/504:日志出现 connect() failed (111: Connection refused) 或 upstream timed out。处理:确认上游(如 PHP-FPM/Node.js)运行与端口连通;必要时调整 proxy_connect_timeout / proxy_read_timeout。
- 模块缺失或未加载:报错 unknown directive 或 module “xxx” is not loaded。处理:用 nginx -V 核对编译参数,检查 load_module 与 .so 动态模块路径及版本匹配。
三 日志与状态码诊断
- 日志配置与级别:在 http/server/location 中使用 error_log /var/log/nginx/error.log warn; ;排查时可临时提升到 debug(性能影响大,排查后恢复)。
- 典型错误模式:
- Permission denied → 文件/目录权限或 SELinux 策略问题;
- upstream timed out → 上游响应慢或不可用,检查后端与网络;
- failed (111: Connection refused) → 上游未监听或端口错误。
- 访问日志分析:用 awk ‘{ print $9} ’ /var/log/nginx/access.log | sort | uniq -c | sort -n 统计状态码;用 grep "404 " /var/log/nginx/access.log 聚焦异常资源;可用 GoAccess 做可视化分析。
四 网络与系统层检查
- 防火墙放行:在 CentOS 执行 firewall-cmd --add-service=http --permanent & & firewall-cmd --add-service=https --permanent & & firewall-cmd --reload。
- SELinux 策略:排查阶段可 setenforce 0 验证;长期方案使用 chcon 设置正确上下文,或按需启用布尔值(如允许网络连接到后端)。
- 端口与进程:用 ss/netstat 确认 80/443 监听;必要时释放端口或调整 Nginx 监听端口。
- 深入跟踪:对疑难问题用 strace -p < worker_pid> -s 1024 -e trace=file,network 观察系统调用失败点(如 ECONNREFUSED/EPERM)。
五 一键排查命令清单
- 基本信息:
- 版本与路径:nginx -v,whereis nginx
- 运行状态:systemctl status nginx,ps -ef | grep nginx
- 配置与模块:
- 语法测试:nginx -t -c /etc/nginx/nginx.conf
- 编译参数与模块:nginx -V 2> & 1 | tr ’ ’ ‘\n’ | grep – ‘–with’
- 动态模块:ls -lh /usr/lib64/nginx/modules/;配置中检查 grep load_module /etc/nginx/
- 日志与端口:
- 实时错误:tail -f /var/log/nginx/error.log
- 端口占用:ss -tulnp | grep :80 或 lsof -P -n -i :80
- 连通性与策略:
- 本机访问:curl -I http://127.0.0.1/
- 防火墙:firewall-cmd --list-services,firewall-cmd --add-service=http --permanent & & firewall-cmd --reload
- SELinux:getenforce,setenforce 0(仅测试),chcon -R -t httpd_sys_content_t /var/www/html
- 上游连通性:
- 端口监听:ss -tulnp | grep :9000(以 PHP-FPM 为例)
- 直连测试:telnet 127.0.0.1 9000
- 进程跟踪:
- 跟踪工作进程:strace -p $(pgrep nginx | head -1) -s 1024 -e trace=file,network
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: centos nginx故障排查常见方法
本文地址: https://pptw.com/jishu/776780.html
