502、504、403……网站常见错误码是什么意思?怎么修?

502、504、403……网站常见错误码是什么意思?怎么修?

你是不是也遇到过这种情况:打开一个网站,没看到想看的内容,反而看到一行冷冰冰的数字——502 Bad Gateway,或者504 Gateway Timeout。

你刷新,没用。你关了重开,还是没用。你以为是网站挂了,但其实只是某个环节出了问题。

这些数字不是随机生成的,它们是HTTP状态码,是服务器在跟你说话。它告诉你:我知道你想访问,但我遇到了问题,这是问题的代号。

今天就把最常见的几个错误码聊透:它们什么意思、为什么会出现、怎么修。下次再看到,不用慌,你自己就能判断问题出在哪。


先搞清楚:状态码是分“家庭”的

HTTP状态码是三位数字,第一位数字代表类别:

  • 1xx:信息,很少见
  • 2xx:成功,比如200(一切正常)
  • 3xx:重定向,比如301(永久搬家)、302(临时挪地)
  • 4xx:客户端错误,问题出在你这边(比如你访问了不存在的页面)
  • 5xx:服务端错误,问题出在网站那边(服务器挂了、超时、配置错)

普通人最常遇到的,是4xx和5xx。4xx是你自己的问题,5xx是网站的问题。


403 Forbidden:你有钥匙,但门不让你进

403的意思是:服务器认识你(你发来的请求是合法的),但拒绝让你访问。

有点像你拿着员工卡去刷机房的锁,卡能刷,但权限不够,门不开。

常见原因

  • 网站设置了IP黑名单,你的IP被拦了
  • 你需要登录才能访问,但你没登录
  • 服务器目录权限设置错误(比如把文件夹设成了750,但web用户不在组里)
  • 防火墙或WAF拦截

怎么修(如果你是网站管理员)

  1. 检查Nginx/Apache的deny指令,看看是不是禁止了某些IP
  2. 检查网站目录权限,确保web用户(如www-data)有读取权限
  3. 如果有安全插件(如WordPress的Wordfence),看看是不是触发了拦截规则
  4. 如果你是普通访客,换个网络(比如用手机流量)试试,如果是IP被误封,联系站长解封

反常识点:403很多时候不是故意的,而是配置错误。比如你把index.html放在了/root目录下,web用户读不到,就403。


404 Not Found:你要的东西,这里没有

404是最知名的错误码。意思是:服务器收到了请求,但找不到你要的资源。

常见原因

  • 你输入的网址拼错了(比如/about写成了/abuot
  • 页面被删了,但链接还在
  • 网站改了URL结构,没做重定向

怎么修

  • 如果你是访客:检查网址拼写,或者去首页重新找
  • 如果你是站长:检查Web服务器的配置,确认文件确实存在;如果页面移动了,设置301重定向;或者自定义一个友好的404页面,引导用户回首页

数据:一个大型网站,每天产生的404请求可能占到总请求的5%-10%。大部分是爬虫在扫不存在的路径。


502 Bad Gateway:中间人传话失败了

502是最让人头疼的错误码之一。它表示:网关(比如Nginx)收到了上游服务器(比如PHP-FPM、Tomcat)的无效响应。

用快递比喻:你下单,快递员去仓库取货,仓库说“没货”或者“我挂了”,快递员回来告诉你“502”。

常见原因

  • PHP-FPM进程挂了或没启动
  • Nginx配置的后端地址错误(比如端口写错了)
  • 后端服务负载过高,处理不过来
  • 防火墙阻挡了Nginx到后端的连接

怎么修

  1. 检查后端服务是否运行:systemctl status php7.4-fpm
  2. 查看后端服务日志:tail -f /var/log/php-fpm/error.log
  3. 检查Nginx配置文件中的proxy_passfastcgi_pass地址是否正确
  4. 如果后端服务是动态的(如Java应用),检查它是否启动了、端口是否监听
  5. 重启后端服务试试

真实案例:有次一个网站502,查了半天,发现是PHP-FPM的listen配置用的是Unix Socket,但Nginx里写的是IP+端口。两边对不上,自然502。


504 Gateway Timeout:中间人等太久了

504和502是兄弟。502是后端返回了错误响应,504是后端根本没在指定时间内返回任何响应——等超时了。

想象你在餐厅点餐,厨师做菜太慢,服务员等了一小时还没端上来,最后告诉你“菜做不出来了”。

常见原因

  • 后端执行了一个耗时很长的操作(比如导入大数据、生成报表)
  • 数据库查询慢,卡住了
  • Nginx的proxy_read_timeout设置太短
  • 后端服务死锁或假死

怎么修

  1. 检查后端服务有没有在跑(有时是假死,进程在但无响应)
  2. 查看慢查询日志,优化慢SQL
  3. 增加Nginx的超时时间:proxy_read_timeout 300s;
  4. 如果是特定页面超时,考虑把长任务改成异步处理

反常识数据:很多504不是服务器真的慢,而是上游服务(比如PHP)的max_execution_time设得太短。PHP默认30秒,如果有个脚本跑31秒,就504了。


500 Internal Server Error:服务器自己也不知道怎么了

500是最泛的错误码,意思是:服务器遇到了意外情况,无法完成请求。它不告诉你具体原因,只说“我出错了”。

常见原因

  • 代码语法错误(比如PHP文件里漏了分号)
  • 权限问题(web用户写不了日志、读不了文件)
  • 内存不足
  • 配置文件格式错误

怎么修
500没有捷径,必须查日志。Web服务器的error.log(Nginx的error.log、Apache的error_log)会告诉你具体报错。

bash

tail -50 /var/log/nginx/error.log

看到什么错误,就对症下药。

注意:生产环境应该关闭向用户显示具体错误(显示500就够了),但要把错误写进日志。这样用户不知道内部细节,你又能排查。


301/302:不是错误,是搬家通知

301和302不是错误,是重定向。301是永久搬家,302是临时挪地。

比如你访问http://example.com,网站返回301,告诉你“以后用https://example.com”。浏览器会自动跳过去。

怎么检查
curl -I http://你的域名,看第一行是不是301 Moved Permanently,然后看Location头指向哪里。


一个快速排查的套路

遇到错误码,别慌。按这个顺序来:

  1. 看是4xx还是5xx。4xx是你的问题(URL错了、没权限),5xx是服务器的问题。
  2. 如果是5xx,先重启相关服务(PHP-FPM、Nginx、MySQL)。很多时候服务假死了。
  3. 重启不行,看日志。Web日志、后端日志、系统日志,错误信息就在里面。
  4. 如果是502/504,检查Nginx和后端服务的连接(端口、Socket、防火墙)。
  5. 如果是403,检查权限和IP黑名单
  6. 如果是500,只能靠日志

最后说一句

HTTP状态码不是来折磨你的,是来帮你的。它把问题分类、编号,让你知道从哪里下手。

下次再看到502,你不会只知道“网站挂了”,你知道“Nginx连不上PHP-FPM了”。看到504,你知道“后端太慢了,或者超时太短”。

每看懂一个错误码,你就离“运维高手”近了一步。

把这篇收藏起来,下次报错的时候翻出来对一下。你会发现,大多数问题没那么神秘,只是你没找到解读它的方法。

首页

从“数据副本”到“业务时间线”:现代容灾如何用不可变架构重写恢复规则?

2026-1-4 12:30:25

实操指南知识库

服务器生命周期管理:从部署到退役的最佳实践

2025-1-17 16:06:48

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧