更新时间:2024-03-05 GMT+08:00

如何排查404/502/504错误?

网站接入WAF防护之后,若您访问网站时出现404 Not Found、502 Bad Gateway,504 Gateway Timeout等错误,请参考以下方法解决。

404 Not Found

现象一:访问网站时,返回如图1所示的页面。
图1 404页面
原因:访问地址增加的端口错误。
  • 添加防护域名到WAF时,配置了非标准端口,访问网站时未加端口或使用源站端口,而不是非标准端口,用“https://www.example.com”或者“https://www.example.com:80”访问网站。

    解决办法:在访问链接后加上非标准端口,再次访问源站,如“https://www.example.com:8080”

  • 添加防护域名到WAF时,没有配置非标准端口,访问时使用了非标准端口或者“源站端口”配置的非标准端口,用“https://www.example.com:8080”访问网站。

    没有配置非标准端口的情况下,WAF默认防护80/443端口的业务。其他端口的业务不能正常访问,如果您需要防护其他非标准端口的业务,请重新进行域名配置。

    解决办法:直接访问网站域名,如“https://www.example.com”

现象二:访问网站时,返回的不是图1所示的页面,而是其他的404页面。

原因:网站页面不存在或已删除。

解决办法:请排查网站问题。

502 Bad Gateway

现象:完成WAF配置之后网站访问正常,但过一段时间,访问页面返回502,或者大概率出现502。

如果您的网站不是部署在云上,建议您咨询服务器服务商,该服务器是否存在默认的防护拦截并要求服务商解除默认拦截。

这种情况一般有三种原因:

  • 原因一:您的网站使用了其他的安全防护软件(如360、安全狗、云锁或云盾等安全防护软件),这些软件把WAF的回源IP当成了恶意IP,拦截了WAF转发的请求,导致不能正常访问。

  • 原因二:网站的后端配置了多个服务器,其中某个源站不通。
    按以下方法检测源站配置是否正确:
    1. 登录管理控制台,单击页面上方的“服务列表”,选择安全 > Web应用防火墙,进入Web应用防火墙控制界面。
    2. 在左侧导航树中选择“网站设置”,进入“网站设置”页面。
    3. 在目标域名所在行的“域名”列中,单击目标域名,进入域名基本信息页面。
    4. “服务器”栏中,单击,进入“修改服务器信息”页面,确保对外协议、源站协议、源站地址、端口等信息配置正确。
      图2 服务器配置
    5. 在主机上执行curl命令检测各个源站是否能正常访问。
      curl http://xx.xx.xx.xx:yy -kvv

      xx.xx.xx.xx代表源站服务器的源站IP地址,yy代表源站服务器的源站端口,xx.xx.xx.xx和yy必须是同一个服务器的源站地址和端口。

      • 执行curl命令的主机需要满足以下条件:
        • 网络通信正常。
        • 已安装curl命令。Windows操作系统的主机需要手动安装curl,其他操作系统自带curl。
      • 您也可以在浏览器中输入“http://源站地址:源站端口检测源站是否能正常访问。
      图3 检测源站

      如果显示“connection refused”表示源站不通,不能正常访问网站。按以下方法处理:

      • 检测服务器是否运行正常,如果运行不正常,请尝试重启服务器。
      • 将WAF的回源IP网段添加到防火墙(硬件或软件)、安全防护软件、业务限速模块的白名单中。
  • 原因三:源站性能问题。

    解决办法:排查网站问题并联系您的网站负责人进行解决。

504 Gateway Timeout

现象:完成WAF域名接入配置之后,业务正常,但当业务量增加时,发生504错误的概率增加,直接访问源站IP也有一定概率出现504的返回码。

可能有以下几个原因:

  • 原因一:后端服务器性能问题(连接数,CPU内存占用过大等)。
    解决办法:
    1. 优化服务器的相关配置,包括TCP网络参数的优化配置,ulimit相关参数设置等。
    2. 为了支撑业务量的大量增长,可按照方法一或者方法二进行处理。

      方法一:在ELB上增加后端服务器组。

      方法二:创建新的ELB,并参照以下方法将ELB的EIP作为服务器的IP地址,接入WAF。
      1. 登录管理控制台,单击页面上方的“服务列表”,选择安全 > Web应用防火墙,进入Web应用防火墙控制界面。
      2. 在左侧导航树中选择“网站设置”,进入“网站设置”页面。
      3. 在目标域名所在行的“域名”列中,单击目标域名,进入域名基本信息页面。
      4. “服务器”栏中,单击,进入“修改服务器信息”页面,单击“添加”,新增后端服务器。
    3. 如果客户端协议即“对外协议”是HTTPS协议,可考虑在WAF设置HTTPS转发,回源走HTTP协议即“源站协议”设置为HTTP,降低后端服务器的计算压力。
  • 原因二:安全组未将WAF回源IP设置为白名单或未放开端口。

    解决办法:将WAF的回源IP在网站所在的ECS的安全组里设置为白名单。

  • 原因三:源站有防火墙设备,且该防火墙设备拦截了WAF的回源IP。

    解决办法:将WAF的回源IP在网站所在的ECS的安全组里设置为白名单或者卸载除WAF以外其他防火墙软件。

  • 原因四:连接超时、read超时。

    解决办法:

    • 数据库查询时间过长:
      • 调整优化业务,尽量缩短查询时长,优化用户体验。
      • 修改请求的交互方式,让这种长连接在 60s 内能有一些数据交互(如,ack报文、心跳包、keep-alive等任何可以维持会话的报文)。
    • 大文件上传时间过长:
      • 调整优化业务,尽量缩短文件上传时间。
      • 建议使用FTP方式上传文件。
      • 直接通过IP上传,或者使用没有被WAF防护的域名上传。
      • 使用WAF的独享模式,独享WAF回源超时默认为180s。
    • 源站故障类:

      检查源站业务是否正常。

  • 原因五:源站超带宽。

    解决办法 :扩展源站服务器带宽。

  • 原因六:独享模式下,源站安全组或源站网络ACL未放开。

    解决办法 :放开安全组端口(例如80 、443),网络ACL放通源站子网。

404 Not Found错误排查思路和处理建议

网站接入WAF后,访问网站时出现404 Not Found错误,请参考图4进行排查处理。

图4 404错误排查思路
  • 如果访问网站返回如图5所示页面,原因和处理建议说明如下:
    图5 404页面

    原因一:添加防护域名到WAF时,配置了非标准端口,例如配置了如图6所示的非标准端口业务,访问网站时未加端口用“https://www.example.com”或者“https://www.example.com:80”访问网站。
    图6 非标准端口配置

    处理建:在访问链接后加上非标准端口,再次访问源站,如“https://www.example.com:8080”

    原因二:添加防护域名到WAF时,没有配置非标准端口,访问时使用了非标准端口或者“源站端口”配置的非标准端口,例如配置了如图7所示的防护业务,用“https://www.example.com:8080”访问网站。
    图7 未配置非标准端口

    没有配置非标准端口的情况下,WAF默认防护80/443端口的业务。其他端口的业务不能正常访问,如果您需要防护其他非标准端口的业务,请重新进行域名配置。

    处理建议:直接访问网站域名,如“https://www.example.com”

    原因三:域名解析错误。

    处理建议:
    • 如果该域名已添加到WAF进行防护,参照重新完成域名接入的操作,使流量经过WAF进行转发。
    • 如果该域名未添加到WAF进行防护,需要在DNS服务商处将域名解析到源站的IP。

    原因四:用户多个域名走同个WAF集群回源到同一个后端HTTPS源站+端口,由于WAF回源是长连接复用的,后端源站节点无法分辨是哪个域名(nginx通过Host和SNI分辨),会有一定几率出现A域名的请求转发到B域名的后端,所以会出现404。

    处理建议:修改域名在WAF的后端配置,不同的域名走不同的源站端口进行规避。

  • 如果访问网站时,返回的不是图5所示的404页面,原因和处理建议说明如下:

    原因:网站页面不存在或已删除。

    处理建议:请排查网站问题。