Ubuntu Nginx错误排查方法
导读:Ubuntu 上 Nginx 故障排查清单 一 快速定位流程 检查配置语法:sudo nginx -t,确保输出为 syntax is ok / test is successful。 查看服务状态:sudo systemctl stat...
Ubuntu 上 Nginx 故障排查清单
一 快速定位流程
- 检查配置语法:
sudo nginx -t,确保输出为 syntax is ok / test is successful。 - 查看服务状态:
sudo systemctl status nginx,若失败,结合sudo journalctl -xe获取详细上下文。 - 实时跟踪错误日志:
sudo tail -f /var/log/nginx/error.log,优先从最新报错入手。 - 核对端口监听:
ss -tulnp | grep ':80\|:443'(或netstat -tulnp | grep ':80\|:443'),确认 80/443 未被占用且监听正确。 - 验证外部连通:本地
curl -I http://127.0.0.1或服务器公网 IP;远程可用curl -Iv https://你的域名查看 TLS 握手与重定向细节。
二 常见错误与处理对照表
| 症状 | 快速检查 | 处理要点 |
|---|---|---|
| Job for nginx.service failed | sudo nginx -t、sudo systemctl status nginx、sudo journalctl -xe |
先修正语法或端口冲突,再重启服务 |
| bind() to 0.0.0.0:80 failed (98: Address already in use) | `ss -tulnp | grep :80或netstat -tulnp |
| Permission denied / 403 Forbidden | ls -ld /var/www/html、检查 user 指令 |
目录/文件权限与 Nginx 运行用户(如 www-data) 一致,常用:chmod -R 755 /var/www/html,chown -R www-data:www-data /var/www/html |
| No such file or directory(如 nginx.conf 或 logs 目录缺失) | ls /etc/nginx/nginx.conf、ls /var/log/nginx/ |
指定正确配置:/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf;缺失 logs 则 mkdir -p /usr/local/nginx/logs &
&
touch error.log access.log |
| invalid PID number “” in “/run/nginx.pid” | cat /run/nginx.pid |
以指定配置启动:/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf 重建 pid |
| 域名无法访问 / ERR_NAME_NOT_RESOLVED | nslookup 你的域名、dig 你的域名 |
核对 DNS 解析 与 A/CNAME 记录是否正确 |
| 正则或 location 导致 NOT FOUND | 检查 location 匹配顺序与正则 |
使用精确匹配 location = /,前缀匹配 ^~,区分大小写 ~ 或不区分 ~*,避免错误正则覆盖 |
三 配置与权限要点
- 配置语法与包含关系:修改后用
sudo nginx -t验证;主配置通常位于 /etc/nginx/nginx.conf,站点配置常通过include /etc/nginx/conf.d/*.conf;或include /etc/nginx/sites-enabled/*;引入,便于拆分与排错。 - 监听与虚拟主机:在
server { listen 80; server_name your.domain; ... }中确保端口未被占用、域名与证书匹配;反向代理时proxy_pass目标地址末尾不要带多余 /,以免路径拼接异常。 - 运行用户与文件权限:确认
user www-data;(或自定义用户)与网站目录权限一致;常见做法为目录 755、文件 644,必要时chown -R www-data:www-data 你的目录。 - 日志与审计:默认错误日志 /var/log/nginx/error.log,访问日志 /var/log/nginx/access.log;问题未复现时,先
tail -f观察请求是否到达与匹配到了哪个server/location。
四 网络与防火墙检查
- 本机监听与连通:
ss -tulnp | grep ':80\|:443',curl -I http://127.0.0.1验证服务是否在本机可达。 - 外部访问与解析:
curl -Iv https://你的域名检查 TLS 与重定向;nslookup/dig核对 DNS 记录是否正确。 - 防火墙放行(UFW):
sudo ufw allow 80/tcp、sudo ufw allow 443/tcp,或sudo ufw status查看规则是否已生效。
五 一键排查脚本示例
#!/usr/bin/env bash
set -e
echo "=== 1) 配置语法检查 ==="
sudo nginx -t
echo "=== 2) 服务状态 ==="
sudo systemctl status nginx || true
sudo journalctl -xe --no-pager -n 50 || true
echo "=== 3) 监听端口 ==="
ss -tulnp | grep ':80\|:443' || echo "未检测到 80/443 监听"
echo "=== 4) 错误日志尾部 ==="
sudo tail -n 50 /var/log/nginx/error.log || echo "无 /var/log/nginx/error.log"
echo "=== 5) 站点目录权限示例 ==="
ls -ld /var/www/html 2>
/dev/null || echo "目录 /var/www/html 不存在"
echo "=== 6) DNS 解析 ==="
nslookup your.domain || dig your.domain +short || echo "DNS 解析失败(将 your.domain 替换为实际域名)"
将脚本保存为 nginx-debug.sh,执行 bash nginx-debug.sh 即可按序输出关键诊断信息。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu Nginx错误排查方法
本文地址: https://pptw.com/jishu/778524.html
