错误码全解:Nginx 常用报错及一站式解决方案
Nginx 报错是服务器运维里最常遇到的“老朋友”。不管是 502、504 还是 403,主机选这篇 Linux 教程直接给出每个错误码的常见诱因和解决命令,省去你满网翻帖子的时间。

Nginx 常见 HTTP 错误码及根源排查
Nginx 的报错信息通常记录在 `/var/log/nginx/error.log` 里,但很多人一上来就瞎翻。先搞清楚错误码代表的层级,再对症下药。
502 Bad Gateway 与后端服务失联
502 的根源是 Nginx 无法从后端(PHP-FPM、Node.js、Gunicorn 等)拿到有效响应。最常见的是 PHP-FPM 挂了或端口被占用。
先检查 PHP-FPM 进程是否存活
ps aux | grep php-fpm
如果没有输出,说明 PHP-FPM 挂了,重启它
systemctl restart php-fpm
再确认监听端口
ss -tlnp | grep 9000
如果端口没在监听,检查 `/etc/php-fpm.d/www.conf` 里的 `listen = 127.0.0.1:9000` 配置是否被注释。
504 Gateway Timeout 上游响应超时
504 说明 Nginx 把请求转发给了后端,但后端在规定时间内没返回结果。常见于 PHP 脚本执行时间过长或数据库查询慢。
修改 Nginx 的 proxy_read_timeout 值,单位秒
vim /etc/nginx/nginx.conf
在 http 或 location 块内加入
proxy_read_timeout 300;
同时检查 PHP-FPM 的 request_terminate_timeout
vim /etc/php-fpm.d/www.conf
找到 ;request_terminate_timeout = 0,去掉注释并设大,比如 300
request_terminate_timeout = 300
改完记得重启 Nginx 和 PHP-FPM,否则配置不生效。
403 Forbidden 权限与索引问题
403 通常不是 Nginx 配置错误,而是文件或目录权限导致 Nginx 工作用户(通常是 `nginx` 或 `www-data`)没有读取权限。
检查网站根目录权限
ls -ld /var/www/html
如果属主不是 nginx,修改属主
chown -R nginx:nginx /var/www/html
目录权限建议 755,文件 644
find /var/www/html -type d -exec chmod 755 {} \;
find /var/www/html -type f -exec chmod 644 {} \;
还有一个常见坑:`autoindex` 未开启。如果访问目录时没有索引文件(如 `index.html`),Nginx 默认返回 403。在 location 块加一行 `autoindex on;` 即可。
413 Request Entity Too Large 上传文件限制
传大文件时被 Nginx 拦截,报 413。这是因为 `client_max_body_size` 默认只有 1M。
在 http 或 server 块内设置
client_max_body_size 100M;
如果用了 PHP-FPM,还要同步修改 php.ini 的上传限制
vim /etc/php.ini
找到 upload_max_filesize 和 post_max_size,改为 100M
upload_max_filesize = 100M
post_max_size = 100M
改完重启 Nginx 和 PHP-FPM。
499 Client Closed Request 用户主动断开
499 不是 Nginx 自己的错误码,而是 Nginx 记录客户端在请求完成前主动关闭连接。常见于用户刷新页面或超时。如果频率太高,检查后端处理速度或调整 `proxy_read_timeout`。
500 Internal Server Error 万能错误
500 是个“兜底”错误,意味着 Nginx 配置本身没问题,但后端(如 PHP 代码)报错了。排查方向是看 Nginx 错误日志和 PHP 错误日志。
查看 Nginx 错误日志最后 50 行
tail -50 /var/log/nginx/error.log
查看 PHP 错误日志
tail -50 /var/log/php-fpm/error.log
如果日志里出现 `Primary script unknown`,通常是 `fastcgi_param SCRIPT_FILENAME` 路径写错了。检查 `location ~ \.php$` 块内的配置。
老鸟叮嘱:一个高风险操作
别在 `try_files` 指令里直接写 `$uri.php` 不加判断,容易造成路径遍历漏洞。正确写法是显式指定文件路径,比如:
nginx
location / {
try_files $uri $uri/ /index.php?$args;
}
万一报错了别慌,先看日志,再改配置。
FAQ
Nginx 502 错误怎么解决?
先检查 PHP-FPM 是否在运行,命令 `systemctl status php-fpm`。如果挂了就重启。再确认端口 9000 是否被占用,可以用 `ss -tlnp | grep 9000`。如果端口被其他进程占用了,改 PHP-FPM 监听端口或停掉冲突进程。
Nginx 504 错误如何排查?
从后端响应时间入手。先调大 `proxy_read_timeout` 和 PHP-FPM 的 `request_terminate_timeout`,都设成 300 秒。如果还超时,检查数据库查询是否太慢,或者脚本里有死循环。日志里会记录具体超时的请求 URI。
Nginx 403 错误是什么原因?
大概率是文件权限问题。用 `ls -ld /var/www/html` 看目录属主,如果不是 Nginx 的用户(如 `nginx` 或 `www-data`),用 `chown` 改过来。如果目录没有索引文件且 `autoindex` 关闭,也会报 403。
Nginx 413 错误怎么解决?
修改 `client_max_body_size` 值,比如在 `http` 块内加一行 `client_max_body_size 100M;`。同时修改 `php.ini` 里的 `upload_max_filesize` 和 `post_max_size`。改完后重启 Nginx 和 PHP-FPM。
Linux 小白可以直接用 root 账号操作 Nginx 吗?
建议不要。用 root 启动 Nginx 有安全隐患。最好创建普通用户,把网站目录权限给这个用户。如果必须用 root 改配置,改完立刻切回普通用户。
错误日志里全是 499 什么原因?
499 表示客户端主动断开连接。检查是不是后端处理太慢,导致用户等不及刷新页面。可以调大 `proxy_read_timeout`,或者优化后端代码响应速度。
—
**相关阅读:**
– [VPS 部署 AI 工具需要哪些基础?Linux、Docker、Nginx 和域名配置入门](https://www.zhujixuan.com/jishujiaocheng/9747.html)
– [AI 自动整理服务器日志:Nginx、SSH、安全日志分析流程](https://www.zhujixuan.com/jishujiaocheng/9908.html)
– [Hermes Agent 绑定域名和 HTTPS:Nginx 反向代理完整配置](https://www.zhujixuan.com/jishujiaocheng/9874.html)
转载请注明出处:https://www.zhujixuan.com/jishujiaocheng/9556.html 商家投稿邮箱:zhujixuanblog@qq.com
