Nginx问题排查的核心是**“从现象到日志,从日志到根源”**,通过“错误表现→日志分析→配置/环境检查→修复验证”的闭环流程解决。其中,错误日志是定位问题的“指南针”,能直接指向错误的类型、位置和原因。
Nginx的错误日志默认路径为**/var/log/nginx/error.log**(部分系统可能通过nginx.conf中的error_log指令自定义路径,需优先检查配置文件确认)。
使用tail -f /var/log/nginx/error.log命令实时查看日志输出,可快速捕捉到最新的错误信息(如启动失败、请求异常等)。例如,当Nginx无法启动时,日志会直接显示“configuration file /etc/nginx/nginx.conf test failed”等关键信息。
通过grep命令过滤特定错误类型,缩小排查范围:
sudo grep " 404 " /var/log/nginx/access.log(访问日志中的404记录);sudo grep "upstream timed out" /var/log/nginx/error.log;sudo grep "Permission denied" /var/log/nginx/error.log。修改配置文件(如nginx.conf或/etc/nginx/conf.d/*.conf)后,必须执行nginx -t命令验证语法。若配置有误,命令会输出具体的错误位置和类型(如“unexpected ‘}’ in /etc/nginx/sites-enabled/example.com:22”),直接指向问题代码行。
若需确认所有配置(包括引入的子配置)是否正确,可使用nginx -T命令输出完整配置内容,避免遗漏隐藏的错误。
root/alias指令有误)、location规则匹配不当、文件权限不足、后端服务返回404。root/alias指令:alias需指向具体目录(如location /static/ { alias /var/www/html/static/; }),而root需拼接location路径(如location /static/ { root /var/www/html; });ls /var/www/html/target_file;chown -R www-data:www-data /var/www/html(Nginx用户通常为www-data或nginx),chmod -R 755 /var/www/html;location优先级:=(精确匹配)> ^~(前缀匹配)> 正则匹配,避免高优先级规则覆盖需要的路径。proxy_pass地址错误、防火墙阻止通信。systemctl status myapp(如应用服务名为myapp);proxy_pass配置:确保指向正确的后端地址(如location /api/ { proxy_pass http://127.0.0.1:8080; });sudo ufw allow 8080/tcp(允许后端端口通信)。try_files指令使用不当)、PHP/Python等后端代码错误、资源耗尽(内存、连接数)。error_log中会记录具体的错误详情(如“PHP Fatal error: Uncaught Exception”);try_files $uri $uri/ /index.php?$query_string;需确保index.php存在;htop查看内存、CPU占用,调整client_max_body_size(如client_max_body_size 20M;)避免上传文件过大。deny指令配置错误、SELinux限制。chown -R www-data:www-data /var/www/html,chmod -R 755 /var/www/html);location配置:避免不必要的deny all指令;setenforce 0(若问题消失,需调整SELinux策略)。nginx -t;netstat -tuln | grep :80(如80端口被占用,需停止冲突服务或修改Nginx端口);free -h查看内存,df -h查看磁盘空间。grep、awk快速过滤日志(如awk '$0 ~ /2025-07-03/ && /error/' /var/log/nginx/error.log筛选2025-07-03的错误日志);strace跟踪Nginx进程的系统调用:strace -f -o nginx.strace sudo nginx -t,查看Nginx在启动或运行时的具体操作(如文件打开、网络连接),辅助定位底层问题。根据排查结果修复问题(如修改配置文件、调整权限、重启后端服务),然后重新加载Nginx配置(sudo nginx -s reload,避免重启导致服务中断),最后验证问题是否解决(如重新访问报错页面,检查日志是否还有相关错误)。