负载均衡500/502/504错误排查

来源:互联网 发布:warframe下载缓存优化 编辑:程序博客网 时间:2024/06/05 18:13

    对于配置负载均衡之后,访问网站出现500 Internal Server Error, 502 Bad Gateway, 504 Gateway Timeout等错误,有可能由多种原因导致,例如运营商拦截,客户端异常行为导致防火墙封杀,负载均衡配置错误或者健康检查失败,后端Web应用访问问题等。

可能原因以及解决方案

一、源站域名没有备案或者域名没有在高防或者安全网络配置七层转发

解决方案:请将域名备案。如果负载均衡在高防或者安全网络,配置对应的域名规则。

二、客户端源IP地址被防火墙拦截

测试其他ISP运营商的客户端是否有相同问题,如果仅仅是某个固定运营商网络的客户端访问有问题,一般是运营商封杀导致。
解决方案:抓包确认是否有封杀行为

三、后端web服务器Linux内核参数配置错误

对于后端web为Linux系统,改成TCP模式时需要注意关闭系统内核参数中rp_filter相关设置。
解决方案:将系统配置文件/etc/sysctl.conf的以下三个配置的值为0,然后执行sysctl -p。

net.ipv4.conf.default.rp_filter = 0net.ipv4.conf.all.rp_filter = 0net.ipv4.conf.eth0.rp_filter = 0

四、后端Web服务器性能瓶颈

例如CPU高,外网带宽跑满均可能导致访问异常。
解决方案:检查后端Web服务器性能,解决性能瓶颈问题,如果是整体系统容量不够,可以通过扩容后端web服务器的数量消除问题。

五、健康检查失败导致负载均衡出现502错误

未开启负载均衡的健康检查,同时服务器中Web服务无法正常处理HTTP请求,比如Web服务未运行,也会出现502错误。

六、健康检查正常但Web应用报502错误

    502 Bad Gateway错误提示表明负载均衡可以将来自客户端的请求转发到后端服务器中,但是服务器中Web应用处理异常抛出该提示,所以排错的方向是针对服务器中Web应用的配置以及运行情况进行分析。例如Web应用处理HTTP请求的时间超过了负载均衡的timeout时间。在七层HTTP模式下,后端对PHP请求的处理时间超过proxy_read_timeout 60秒,此时会出现负载均衡抛出的504 Gateway Time-out。对于四层监听,超时时间为900秒。

    解决方案:确保Web服务以及依赖正常运行,检查PHP请求处理情况,优化后端PHP请求处理。下面以Nginx+php-fpm为例进行分析说明:

1、处理PHP请求的进程数达到上限。
    当前服务器中PHP请求总数已经达到了php-fpm中max_children设置的上限,如果后续有新的PHP请求到达服务器中,这种情况下通常会有502与504错误随机出现:
    如果已有的请求被马上处理完成,新请求被继续处理,一切正常;
    如果已有的PHP请求处理较慢,新的PHP一直处于等待状态,直至超过Nginx的 fastcgi_read_timeout的值,就会出现504 Gateway timeout的错误;
    如果已有的PHP请求处理较慢,新的PHP处于等待状态,超过了Nginx的request_terminate_timeout的值,就会出现502 Bad Gateway的错误。

2、健康检查针对的是静态页面,实际处理动态请求的进程异常,比如php-fpm未启动运行。

3、PHP脚本执行时间处理超时,即如果php-fpm处理PHP脚本的时长超过了nginx中 request_terminate_timeout设置的值,会报错502

七、HTTP模式下配置过大Head头信息

过大的Head头信息也可能导致负载均衡无法正确处理相关数据,进而引发502错误。
解决方案:减少通过 Head 头传递的数据量或者换成TCP监听。


排查步骤

这里写图片描述

原创粉丝点击