如何排查Debian上Nginx的运行问题
导读:Debian 上 Nginx 运行问题排查清单 一 快速定位服务状态与配置 查看服务状态与最近日志:运行 systemctl status nginx,若失败用 journalctl -xe 查看详细错误;必要时用 tail -f /va...
Debian 上 Nginx 运行问题排查清单
一 快速定位服务状态与配置
- 查看服务状态与最近日志:运行 systemctl status nginx,若失败用 journalctl -xe 查看详细错误;必要时用 tail -f /var/log/syslog 观察系统级事件。
- 验证配置语法并热重载:执行 nginx -t,无误后 systemctl reload nginx 或 systemctl restart nginx。
- 核对监听端口与进程:用 ss -tulpen | grep ‘:80|:443’ 确认 80/443 被 Nginx 占用;用 ps aux | grep nginx 查看 worker 是否正常。
- 本机直连测试:执行 curl -Iv http://127.0.0.1/ 或 curl -Iv https://127.0.0.1/ 验证服务本身是否可响应。
以上步骤能快速判断是“进程未起”“配置错误”还是“端口未监听”。
二 日志分析与常见错误场景
- 错误日志优先:查看 /var/log/nginx/error.log,关注时间戳、进程/连接 ID、错误描述;必要时在 http/server/location 块将 error_log 临时提升到 debug(排查完记得恢复,避免性能开销)。
- 访问日志定位问题请求:查看 /var/log/nginx/access.log,用状态码筛选 4xx/5xx,例如:
- 统计状态码分布:awk ‘{ print $9} ’ access.log | sort | uniq -c | sort -nr
- 查找 502 对应请求:awk ‘$9 == 502 { print $1, $7} ’ access.log
- 典型错误与处理要点:
- 502 Bad Gateway / upstream timed out:多为上游(如 PHP-FPM/uWSGI)无响应或超时,检查上游是否存活、端口/套接字是否正确、反向代理超时设置是否合理。
- Permission denied / 13: Permission denied:检查 /var/log/nginx/ 及站点目录权限与属主,确认 worker process 运行用户具备读取权限。
- Address already in use:端口被占用,使用 ss -tulpen | grep ‘:80|:443’ 找到占用进程并处理。
- Segmentation fault / SIGSEGV:配置 worker_rlimit_core 500m; 生成 core dump,用 gdb /usr/sbin/nginx core.pid 分析;此类多与模块缺陷或不当配置相关。
- client_max_body_size 过小导致 413 Request Entity Too Large:按业务需要调整大小并重载。
通过“错误日志定位原因 + 访问日志还原请求”的组合,能高效缩小问题范围。
三 网络连通性与访问控制
- 防火墙放行:若使用 ufw,执行 ufw status 查看规则,必要时 ufw allow 80/tcp 与 ufw allow 443/tcp;如使用 iptables,核对相应规则。
- 监听地址与端口:确认 listen 80; listen [::]:80 ipv6only=on; (以及 443/ssl)配置正确,且未仅绑定到 127.0.0.1 导致外部不可达。
- 外部连通性:从客户端执行 curl -Iv https://your-domain/;必要时在服务器侧用 tcpdump 抓包分析握手与数据通路。
- 云厂商安全组:如运行在 云服务器,同步检查安全组是否放行 80/443。
网络层面的阻断常见于防火墙/安全组策略或服务仅监听内网地址。
四 资源与依赖服务检查
- 资源瓶颈:用 top/htop、vmstat 观察 CPU、内存、I/O 是否耗尽;磁盘满会导致写入失败与异常。
- 后端依赖:在 LNMP 场景下,分别检查 MySQL/MariaDB 与 PHP-FPM(如 systemctl status mysql、systemctl status php-fpm*),并查看其错误日志;确保 FastCGI/反向代理 地址、端口、协议一致。
- 系统日志:用 dmesg 检查内核与驱动异常(如 OOM、文件系统只读)。
- 版本与更新:执行 apt update &
&
apt upgrade 保持系统与 Nginx 处于较新稳定版本,降低已知漏洞与兼容性问题风险。
资源不足或依赖异常常引发 502/504 与间歇故障。
五 一键排查命令清单
# 1) 服务状态与系统日志
systemctl status nginx
journalctl -xe -u nginx
tail -n50 /var/log/syslog
# 2) 配置与端口
nginx -t &
&
systemctl reload nginx
ss -tulpen | grep ':80\|:443'
ps aux | grep nginx
# 3) 本机直连
curl -Iv http://127.0.0.1/
curl -Iv https://127.0.0.1/
# 4) 日志定位
tail -f /var/log/nginx/error.log
awk '{
print $9}
' /var/log/nginx/access.log | sort | uniq -c | sort -nr
awk '$9 == 502 {
print $1, $7}
' /var/log/nginx/access.log
# 5) 防火墙与安全组
ufw status
ufw allow 80/tcp
ufw allow 443/tcp
# 6) 资源与依赖
top -b -d 1 -n 20
systemctl status mysql
systemctl status php*-fpm
dmesg | tail -50
# 7) 抓包与上游连通性
tcpdump -ni any -s0 -w /tmp/nginx.pcap port 80 or port 443
curl -v http://127.0.0.1:9000/ || echo "PHP-FPM unreachable"
以上命令覆盖“状态—配置—日志—网络—资源—依赖”的完整闭环,适合作为日常排障的速查脚本。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 如何排查Debian上Nginx的运行问题
本文地址: https://pptw.com/jishu/749782.html
