502、504、403……网站常见错误码是什么意思?怎么修? – 主机技术分享

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

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

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

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

Table of Contents

Toggle

先搞清楚:状态码是分“家庭”的403 Forbidden:你有钥匙,但门不让你进404 Not Found:你要的东西,这里没有502 Bad Gateway:中间人传话失败了504 Gateway Timeout:中间人等太久了500 Internal Server Error:服务器自己也不知道怎么了301/302:不是错误,是搬家通知一个快速排查的套路最后说一句

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

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

1xx:信息,很少见

2xx:成功,比如200(一切正常)

3xx:重定向,比如301(永久搬家)、302(临时挪地)

4xx:客户端错误,问题出在你这边(比如你访问了不存在的页面)

5xx:服务端错误,问题出在网站那边(服务器挂了、超时、配置错)

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

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

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

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

常见原因:

网站设置了IP黑名单,你的IP被拦了

你需要登录才能访问,但你没登录

服务器目录权限设置错误(比如把文件夹设成了750,但web用户不在组里)

防火墙或WAF拦截

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

检查Nginx/Apache的deny指令,看看是不是禁止了某些IP

检查网站目录权限,确保web用户(如www-data)有读取权限

如果有安全插件(如WordPress的Wordfence),看看是不是触发了拦截规则

如果你是普通访客,换个网络(比如用手机流量)试试,如果是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到后端的连接

怎么修:

检查后端服务是否运行:systemctl status php7.4-fpm

查看后端服务日志:tail -f /var/log/php-fpm/error.log

检查Nginx配置文件中的proxy_pass或fastcgi_pass地址是否正确

如果后端服务是动态的(如Java应用),检查它是否启动了、端口是否监听

重启后端服务试试

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

504 Gateway Timeout:中间人等太久了

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

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

常见原因:

后端执行了一个耗时很长的操作(比如导入大数据、生成报表)

数据库查询慢,卡住了

Nginx的proxy_read_timeout设置太短

后端服务死锁或假死

怎么修:

检查后端服务有没有在跑(有时是假死,进程在但无响应)

查看慢查询日志,优化慢SQL

增加Nginx的超时时间:proxy_read_timeout 300s;

如果是特定页面超时,考虑把长任务改成异步处理

反常识数据:很多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头指向哪里。

一个快速排查的套路

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

看是4xx还是5xx。4xx是你的问题(URL错了、没权限),5xx是服务器的问题。

如果是5xx,先重启相关服务(PHP-FPM、Nginx、MySQL)。很多时候服务假死了。

重启不行,看日志。Web日志、后端日志、系统日志,错误信息就在里面。

如果是502/504,检查Nginx和后端服务的连接(端口、Socket、防火墙)。

如果是403,检查权限和IP黑名单。

如果是500,只能靠日志。

最后说一句

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

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

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

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

中兴为什么要叫ZTE
继天涯社区后另一“时代的眼泪”回归,西祠胡同官宣 7 月 1 日重新上线