HTTP 状态码中的 504 代表网关超时。当服务器作为网关或代理时,未能及时从上游服务器收到请求,就会出现这种情况。例如,2024 年 4 月 8 日下午,腾讯云出现服务故障,网页显示 504 错误。此次故障一共持续了近 87 分钟,期间共有 1957 个客户报障。
504 错误的出现可能有多种原因。一方面,可能是网关超时,即网关服务器在处理请求时,向上游服务器发送请求,但在规定时间内没有收到响应,导致超时。另一方面,上游服务器故障或负载过高也可能引发 504 错误。比如上游服务器出现故障无法及时响应网关服务器的请求,或者流量过大导致服务器资源无法满足需求,响应超时。此外,网络问题、DNS 解析问题、代理服务器问题以及网站代码错误等也可能导致 504 错误。
504 错误在客户端和网络服务器通讯的最后一步生成。客户端在和服务器通讯时,首先从站点的 IP 名称获得一个 IP 地址,然后打开一个 IP 套接字连接到该 IP 地址,通过该套接字写 HTTP 数据流,最后从 Web 服务器接受响应的 HTTP 数据流。当客户端收到 HTTP 状态编码并识别其为‘504’时,就会出现 504 错误。这个问题完全是由后端电脑之间 IP 通讯缓慢而产生,可能包括 Web 服务器。如果 Web 服务器由某一网站托管,只有负责那个网站设置的人员才能解决这个问题。
二、504 错误的产生原因
(一)服务器不稳定
当服务器不稳定,出现死机等异常情况时,就会导致 504 错误的出现。这是因为服务器无法正常响应客户端的请求,从而使得网关超时。一般情况下,重启服务器可以暂时解决问题,但如果这种情况经常发生,那就需要考虑更换服务器了。据统计,约有 30% 的 504 错误是由服务器不稳定引起的。
(二)网站被攻击
网站遭受 DoS 攻击时,也会造成服务器出现 504 错误。DoS 攻击会向服务器发送大量非法访问请求,使服务器负载过高,无法及时响应正常请求。例如,2024 年 8 月,火遍全球的游戏平台 Stamen 惨遭 DDoS 攻击,导致许多玩家无法登录。为了应对这种情况,需要增加防御措施,如设置 DNS 隐藏真实 IP,这样可以减少攻击面;购买高防服务器,能够抵御大量的攻击流量;安装云锁,批量屏蔽攻击者的 IP 段,有效阻止攻击。
(三)数据库与服务器断开相应
服务器死机不一定是本机异常,也可能是 MySQL 异常所导致的。当数据库与服务器断开连接时,会造成无法连接或出现 504 错误。为了保证服务器的良性运行,建议升级数据库版本。这样可以修复一些已知的问题,提高数据库的稳定性和性能。
(四)PHP 环境配置问题
当网站对 php-fpm 和 nginx 进行配置修改时,可能会出现 504 错误。这是因为配置不当可能导致无法请求到可以执行的 PHP-CGI。解决方法是更改 php-fpm 的配置,把 max_children 由之前的 10 改为现在的 30,保证有充足的 php-cgi 进程可以被使用;把 request_terminate_timeout 由之前的 0s 改为 60s,提高处理脚本的超时时间。同时,更改 nginx 的几个配置项,减少 FastCGI 的请求次数,如将 fastcgi_buffers 由 4 64k 改为 2 256k,fastcgi_buffer_size 由 64k 改为 128K 等。重新加载 php-fpm 和 nginx 的配置后,再次测试,如果没有出现 “504 Gateway Time-out” 错误,问题就解决了。
三、如何判断 504 是被攻击导致
(一)异常现象
当网站显示很慢时,用户访问网站经常出现 “504 网关时间输出” 错误信息,这是服务器请求处理未能及时完成的证据,很可能是受到了 DoS 攻击。据相关调查介绍,用于 DoS 攻击的 99% 的访问来自海外。如果没有理由却出现海外访问的激增,就需要怀疑有可能是 DoS 攻击。此外,不自然的访问增加也是一个迹象,比如以 1 秒为增量进行页面转移,从同一 IP 地址以短间隔多次访问的 BOT 这样的请求变多,可能是初期阶段的 DoS 攻击。
(二)查看资源监控和日志
首先,查看资源监控日志可以了解是否有资源耗尽的情况。如果有某些资源被过度使用,可能是受到攻击或者存在其他问题导致的。接着,查看 Nginx access 的日志或 error 日志,判断是否有攻击行径。如果日志中出现大量异常的请求或者连接尝试,可能是正在遭受攻击。同时,查看 PHP 的进程慢日志也非常重要。一般来说,配合 PHP 的慢日志以及 Nginx 的 error 日志,可以定位到具体是在执行哪个文件、访问哪个路径时引起了资源耗尽的问题,从而更精准地去定位问题并进行优化操作。例如,在 WordPress 建站中,系统报错 504/502 时,开发工程师就会先查看资源监控日志,再根据这个条件去查看 Nginx access 的日志或 error 日志,同时留意 PHP 的进程慢日志,以便更准确地找到问题所在并进行优化。
四、504 错误与 DoS 攻击的关系
(一)DoS 攻击的手段和危害
- 攻击手段:
-
- TCP SYN 泛洪攻击:向服务器发送大量开始 TCP 通信所需的 SYN 数据包,但不回复 ACK 数据包,导致服务器端口保持打开状态等待响应,可用端口逐渐消失,服务器无法正常工作。
-
- HTTP 泛洪攻击:向 web 应用程序发送大量 HTTP 请求,以 APP 应用层为目标,增加 Web 服务器负荷,使其难以访问。
-
- Slow HTTP DoS 攻击:向服务器发送请求速度很慢,几乎达到即将超时的程度,占用资源降低服务器处理能力。
- 危害:
-
- 网站和 Web 服务出现延迟和无法浏览等故障,影响访问。例如,2024 年 8 月,火遍全球的游戏平台 Stamen 惨遭 DDoS 攻击,奇安信 XLab 实验室观察到 28 万条攻击指令,是平时的 2 万多倍。近 60 个僵尸网络参与了此次攻击,其规模是之前某直播访谈遭受攻击时的 15 倍。攻击者集中火力攻击了全球 13 个国家和地区的 107 个 Steam 服务器 IP,并且选择在当地游戏高峰期发动攻击,这次攻击导致许多玩家无法登录 Steam 平台。
-
- 影响安全系统,可能引发 SQL 注入、跨站点脚本 (XSS) 等攻击,导致信息泄露和网站篡改等损害。
(二)应对 DoS 攻击的三种服务
- 防 DDoS 攻击服务:
-
- 有专门针对 DDoS 攻击的对策服务,如亚马逊网络服务 (AWS) 环境的 “AWS Shield” 和 Microsoft Azure 的 “azure DDOS 保护”。AWS Shield 是 AWS 提供的防 DDoS 攻击服务,还提供免费方案,可轻松导入。
- WAF(Web 应用程序防火墙):
-
- 是一种安全服务,可以防止针对包括网站在内的 web APP 漏洞的网络攻击。通过逐个确认通信内容,屏蔽可疑通信,保护服务器。部署 DNS WAF 时,WAF 中心位于服务器之前,用于 DDoS 攻击的未授权访问将被 WAF 中心阻止,不会到达服务器,缓解 DDoS 攻击。同时,WAF 专门用于防御 web APP,可有效抵御可能导致 SQL 注入和跨站点脚本 (XSS) 等信息泄露和篡改的网络攻击。
- 内容分发网络 (CDN):
-
- 由多个缓存服务器组成,网站内容会暂时保存 (缓存) 在缓存服务器中。有请求时,从离用户最近的缓存服务器进行分发,实现内容高速分发。引入 CDN 可以减少直接访问服务器的次数,从而减少 DDoS 攻击。
五、总结与展望
网站出现 504 错误是一个复杂的问题,可能由服务器不稳定、网站被攻击、数据库与服务器断开相应以及 PHP 环境配置问题等多种原因引起。其中,DoS 攻击是导致网站出现 504 错误的一个重要因素。通过对异常现象的观察以及查看资源监控和日志,可以判断网站是否受到 DoS 攻击。
为了应对 504 错误和 DoS 攻击,我们可以采取多种措施。首先,要确保服务器的稳定性,定期检查服务器的运行状态,及时处理服务器故障。其次,要加强网站的安全防护,采取有效的防御措施,如设置 DNS 隐藏真实 IP、购买高防服务器、安装云锁等,防止网站被攻击。此外,还需要优化数据库和服务器的连接,保证数据库的稳定运行。同时,要合理配置 PHP 环境,避免因配置不当导致 504 错误的出现。
在应对 DoS 攻击方面,可以采用防 DDoS 攻击服务、WAF 和 CDN 等技术手段。这些服务可以有效地保护网站免受攻击,提高网站的安全性和稳定性。
展望未来,随着网络技术的不断发展,网站面临的安全威胁也将不断增加。为了更好地防范 504 错误和 DoS 攻击,我们需要不断加强技术研发,提高安全防护水平。同时,也需要加强用户的安全意识教育,提高用户对网络安全的认识和防范能力。只有通过综合施策,才能有效地保障网站的安全稳定运行,为用户提供更好的服务。
墨者安全 防护盾
墨者安全作为专业级别安全防护专家,在应对 Webshell 风险隐患方面展现出了卓越的能力。其拥有全面的检测机制,能够精准识别 Webshell 的各种类型和变体,无论是复杂的大马,还是隐蔽的内存马,都难逃其敏锐的监测。
墨者安全防护盾具备强大的实时监控功能,对服务器的各项活动进行 7*24 小时不间断的监视。一旦发现任何可疑的 Webshell 活动迹象,立即发出警报,并迅速采取隔离和清除措施,将风险扼杀在萌芽状态。
在防护策略上,墨者安全防护盾采用了多层次的防御体系。不仅能够在网络层面阻挡外部的恶意访问和攻击,还能深入系统内部,对服务器的文件系统、进程等进行深度检查和保护,确保 Webshell 无法植入和运行。
同时,墨者安全防护盾拥有快速的应急响应能力。当 Webshell 攻击事件发生时,专业的安全团队能够迅速介入,进行深入的分析和处理,最大程度减少攻击带来的损失,并帮助用户快速恢复服务器的正常运行。
墨者安全防护盾还注重用户教育和培训,为用户提供关于 Webshell 防范的专业知识和最佳实践,帮助用户提升自身的安全意识和防范能力,共同构建坚实的网络安全防线。