刚才刷站长交流群,正好看到三个人在问同一个问题:好好的网站突然打不开,网站返回502,到底咋回事啊?其实我前两年帮朋友排错的时候也碰到过好几次,总结下来,大部分502都不是什么搞不定的大问题,只要找对方向很快就能解决,最怕的就是瞎改一通越弄越糟,今天就随便聊聊我总结出来的思路,给新手朋友们提个醒。

网站返回502本质是什么?
很多新手一看到错误码就慌,其实先搞懂这个状态码是什么意思就好办了。502 Bad Gateway,翻译过来就是“错误网关”,说白了就是服务器当网关的时候,收到了上游服务器发过来的错误响应,所以才返回给你这个码。所以问题一般出在服务器端的链路上面,不是前端代码写错那种(当然不排除配置写错导致的,那也是服务器配置的问题),所以排查方向肯定要从服务器那边找,不要盯着前端代码改半天,瞎耽误功夫,这是我踩过的坑,说出来给大家提个醒。
最常见的几个引发原因
我碰到最多的就是服务器负载太高,什么CPU跑满了,内存不够用了,一下子处理不过来请求,自然就返回502了。尤其是那种用小配置主机跑流量突然上来的站点,特别容易出这个问题。我之前帮朋友处理过一个个人博客,就是因为某篇文章被转到了热门论坛,流量一下子炸了,小主机扛不住直接GG,全页502,升级一下带宽和内存就好了,是不是很简单?
第二个常见的就是反向代理配置错了,比如用Nginx反代后端的PHP或者Node服务,地址写错了端口错了,或者后端服务根本没启动,那Nginx自然拿不到响应,就扔个502给你。还有就是域名解析改了之后,IP没同步,或者CDN那边出问题了,源站连不上,CDN也会返回502,这个我也碰到过,之前有个用户就是换了源站IP没更新CDN配置,结果全站502好几个小时,自己还不知道。
第三个就是防火墙的问题,服务器防火墙把端口给挡了,或者后端服务绑定的地址不对,外部连不上,也会出这个错。反正翻来覆去就是这几个原因,很少有特别冷门的情况。
排查第一步该做什么?
我一般习惯先看服务器本身啊,登后台看看负载情况,CPU和内存占用是不是超过80%了,如果是的话那大概率就是扛不住了,先停几个不必要的进程,或者临时升级一下配置看看,如果恢复了那就是负载的问题,接下来要么优化程序,要么升级配置就好了。
如果负载没问题,那接下来就看后端服务有没有正常启动,比如你跑的是PHP-FPM,看看进程还在不在,端口开对了没有。我之前就碰到过一次,服务器重启之后PHP-FPM没设开机自启,结果重启完全站502,我愣是找了半小时才发现,说出来都是泪啊,这种低级错误新手也容易犯,一定要记得检查开机自启啊。
然后一定要去看Nginx或者Apache的错误日志,日志里一般都会写清楚为啥错,是连不上后端还是连接超时,照着日志提示查比瞎蒙强一百倍,真的,别不看日志瞎折腾,日志就是你排查最好的朋友,这点我啰嗦一万遍都不为过。
要不要排查CDN和解析?
如果你用了CDN,那接下来就要看看源站是不是能直接访问,你可以本地绑个hosts,直接用源站IP访问试试,如果源站直接访问也出502,那问题肯定在源站,和CDN没关系;如果源站访问正常,那就是CDN那边配置或者节点的问题,清空下CDN缓存,检查下CDN配置对不对,一般就能解决。
至于域名解析,如果你刚改完解析没多久就出问题,那大概率是解析的问题,看看解析到的IP对不对,有没有写错,ping一下域名看看IP是不是你设置的那个,不对的话改过来等生效就好了,也不是什么大问题。
那些容易忽略的小细节
哦对了,还有端口,别小看端口,比如后端服务开的是8080,你Nginx反代的时候写成8081了,那肯定连不上啊,这种笔误我自己都犯过,查了半天发现就是数字写错了,尴尬的要死。还有就是后端服务绑定的地址,如果只绑了127.0.0.1,那Nginx从外部连不进去啊,当然返回502,这也是很常见的配置错误。
排查的时候记得先备份当前配置啊,改坏了还能改回来,别给自己找额外的麻烦,这点也很重要,别嫌麻烦就跳过,真出问题的时候你就会感谢我这句话了。
其实总结下来,网站返回502真的没那么可怕,只要一步步从服务器负载、后端服务状态、配置日志、CDN域名解析慢慢排查,大部分问题十来分钟就能找到原因,新手别一看到错误码就慌了神,实在搞不定找服务商技术支持,让他们帮你看看服务器状态,也比自己瞎改强。只要平时多留心,多排两次错你就熟了,也就那点事儿,没什么高深的。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!