在504网关超时错误是最常见的HTTP的一个5XX面临网站所有者和网站访问者的错误。对于许多WordPress博客和电子商务平台,了解如何修复此类服务器错误对于防止来之不易的访问者跳转到竞争对手网站至关重要。
由于504 Gateway Timeout错误没有告诉您发生的原因,因此很难确定导致服务器超时的原因。本文将帮助您详细了解它,了解如何诊断其原因,然后修复它。
在尝试了文章中提到的所有各种解决方案后,您的网站应该立即启动并运行。
什么是504网关超时错误?
每次您在浏览器中访问网站时,浏览器都会向托管该网站的Web服务器发送请求。服务器处理请求并使用请求的资源进行响应。
HTTP请求和响应的工作原理
服务器响应包括许多HTTP状态代码之一,以向浏览器指示响应的状态。但并非所有这些 HTTP 状态代码都是错误。例如,200 OK状态代码意味着服务器成功处理了请求并且“一切正常”。
在5XX类的HTTP状态代码表示什么的错误的服务器,该服务器是意识到这一点,并不能进行客户端的请求。因此,它们也称为服务器错误5xx状态代码。
正式地,在5xx类下指定了五个状态代码(500、501、502、503、 504 )。您也可能会遇到许多非官方代码(506 、 507 、 509、520等)。
IETF将504网关超时错误定义为:
504(网关超时)状态代码表示服务器在充当网关或代理时,没有收到来自它需要访问以完成请求的上游服务器的及时响应。
为了进一步简化,当两个服务器参与处理请求时会发生此错误。第一个服务器(通常是主服务器)超时,等待第二个服务器(上游服务器)的响应。
504网关超时错误以各种形式表现出来。以下是它通常出现的一些方式:
Chrome浏览器中的“HTTP ERROR 504”
504 Gateway Timeout错误类似于502 Bad Gateway错误,表示第一台服务器收到了来自第二台服务器(上游服务器)的无效响应。
Chrome DevTools中的“504 GATEWAY TIMEOUT”状态代码
504网关超时错误的变体
浏览器会在其中显示任何 504 Gateway Timeout 错误,就像任何其他错误一样。由于有各种操作系统、Web 服务器、浏览器和用户代理,因此它可以以多种方式显示。
以下是您可能遇到的一些常见 504 错误消息变体:
- 504 Gateway Timeout
- 504 Gateway Timeout NGINX
- NGINX 504 Gateway Timeout
- Gateway Timeout Error
- Error 504
- HTTP Error 504
- HTTP Error 504 — Gateway Timeout
- HTTP 504
- 504 Error
- Gateway Timeout (504)
- This page isn’t working — Domain took too long to respond
- 504 Gateway Time-out — The server didn’t respond in time
- 白屏
以上所有错误响应,尽管措辞不同,都指向相同的504网关超时服务器错误。
Web服务器和网站可以自定义向用户显示504网关超时错误的方式。其中一些可能很酷!这是平息访客失望的绝妙策略。
GitHub的自定义HTTP 504错误页面
504网关超时错误对SEO的影响
所有5xx错误都会阻止网页加载,从而对用户体验不利。因此,像谷歌这样的搜索引擎会认真对待这些错误。如果错误持续很长时间,它甚至可能导致从搜索引擎结果中取消对网页的索引。
例如,当Google蜘蛛偶然发现503 Service Unavailable错误时,他们会明白这是一个临时问题,因为它主要用于启用站点维护模式。因此,他们稍后会再次尝试抓取该页面。
504网关超时错误不一定是暂时的,因为它可能是由多种原因造成的。如果您的网站仅关闭几分钟,并且蜘蛛程序每分钟都尝试多次抓取它,它们将尝试从缓存中提供该页面。他们甚至不会注意到它。
但是,如果您的网站停机6个多小时或更长时间,那么Google会将504错误视为您需要尽快修复的严重网站范围问题。这会对您的SEO产生负面影响。
在Google Search Console中查看抓取错误
Google Search Console是监控网站HTTP 5xx错误的最佳SEO工具之一。
504网关超时错误原因
由于504错误是由于服务器之间的超时造成的,因此问题可能不在于客户端的设备或互联网连接。这还包括您的设备和连接。
504网关超时错误表示Web服务器等待来自另一台服务器的响应时间过长并且“超时”。此超时可能有多种原因:另一台服务器运行不正常、过载或关闭。
另一个服务器不必总是在外部(例如CDN、API网关)。它也可以是主Web服务器(例如反向代理服务器、数据库服务器)内的类似服务器的实体。
如何修复504网关超时错误
如果不了解WordPress站点的确切详细信息,例如其服务器配置、托管计划、第三方插件及其吸引的流量,您可能会发现修复504网关超时错误令人沮丧和不知所措。
由于涉及许多变量,我建议您首先修复客户端问题,这非常罕见,然后转向修复服务器端问题。他们通常是 504 错误的罪魁祸首。
尝试重新加载网页
遇到504网关超时错误时,您可以尝试的第一件事是等待几分钟,然后尝试重新加载页面。
您可以按F5键盘快捷键在大多数浏览器中刷新/重新加载网页。要在重新加载之前删除页面的浏览器缓存,您可以改为按CTRL+F5快捷键组合。
在Chrome浏览器中刷新网页
在此期间,您还可以尝试在不同的浏览器中加载该站点,以排除该问题。由于大多数504错误是由于服务器暂时过载造成的,因此使用此解决方案应该会让您的网站立即恢复。
如果等待并重新加载站点不能解决504错误问题,您可以检查站点是否对所有人或只有您自己关闭。用于测试站点停机时间的两个有用的在线工具是Down for Everyone or Just Me和Is It Down Right Now?
测试wbolt.com在线状态
重新启动您的网络设备
有时,调制解调器或路由器等网络设备的问题可能会导致504网关超时错误。重新启动这些设备可以帮助您解决问题。
虽然您可以按任意顺序关闭所有这些网络设备,但重新打开它们的顺序很重要。通常,按照从Internet服务提供商到您的主要客户端设备的连接顺序,从“由外到内”打开这些设备。
检查您的代理设置
代理服务器位于您的设备和互联网之间。它主要用于通过从网站和网络服务器(例如使用VPN)隐藏私人信息(例如设备位置)来增强在线隐私。
虽然代理服务器很少会导致504错误,但错误的代理服务器设置有时可能是原因。您可以禁用代理服务器并尝试重新加载网页以查看它是否会修复错误。
在Windows 10中更改“代理”设置
大多数客户端不使用代理服务,因此如果您确信不使用任何代理服务器,则可以跳过此步骤。但是,您可能在不知情的情况下进行了设置。我建议您检查设备和浏览器的代理设置以排除此原因。
DNS问题
服务器端或客户端(或两者)的DNS问题也可能导致504网关超时错误。
服务器端DNS问题的最可能原因是FQDN(完全限定域名)未解析正确的IP地址或DNS服务器没有响应。通常,当您刚刚将WordPress站点迁移到新服务器或主机时,就会发生这种情况。因此,等待域的DNS记录完全传播很重要,这可能需要长达24小时。
您可以使用whatsmydns.net DNS Checker或DNSMap等免费工具来查看您的DNS是否已传播到全球。
在whatsmydns.net上检查您的域的DNS传播
要修复客户端DNS问题,您可以尝试刷新本地DNS缓存。这就像清除浏览器缓存一样,除了这里,您是从操作系统中清除DNS缓存。
如果您使用的是Windows,则可以通过打开命令提示符并输入以下指令来刷新DNS缓存:
ipconfig /flushdns
在Windows中使用命令提示符刷新DNS缓存
如果有效,您应该会看到“Successfully flushed the DNS resolver Cache.”。
对于最新的macOS版本,您可以打开终端并运行以下命令:
sudo killall -HUP mDNSResponder
该过程完成后,您将不会在 macOS 中看到任何通知,但您可以通过将命令附加到您的自定义消息来更改通知。
sudo killall -HUP mDNSResponder; DNS Cache was cleared successfully
如果您使用的是较旧的macOS版本,您需要输入的命令会根据您运行的macOS版本而有所不同。更详细的可以参考清除DNS缓存教程中的macOS部分。
如果您使用的是Linux操作系统,那么该过程与macOS非常相似,因为即使Linux也使用终端作为其命令行界面。由于有许多Linux发行版,您需要运行的确切命令可能因发行版而异。您可以查看DNS缓存指南以获取更多信息。
最后,您可以临时更改您的客户端DNS服务器。默认情况下,您的ISP会自动为您分配DNS服务器。但是您可以暂时将这些更改为公共DNS IP。
您可以试用的一些可靠DNS服务器是Google Public DNS、Cloudflare 1.1.1.1、Quad9 DNS和Cisco OpenDNS。
在Windows 10中设置自定义DNS服务器
暂时禁用您站点的CDN
有时,问题也可能与您的内容交付网络 (CDN) 有关。如果站点的源服务器不可访问,大多数CDN将尝试从其缓存中提供完整的网页。
但是大多数CDN默认不启用此功能,因为在大多数站点(例如WordPress管理仪表盘)上缓存动态资产很复杂。
在Cloudflare中设置“缓存所有内容”页面规则
解决此问题的一种直接方法是暂时禁用您的CDN。例如,如果您使用免费的WordPress插件-CDN Enabler将您的站点资产链接到CDN URL,那么您可以停用该插件并测试重新加载您的站点。
使用您可能用来连接到CDN的任何其他插件(例如WP Rocket、Breeze、W3 Total Cache)也是如此。
如果您无法访问站点的管理仪表板,您可以通过SFTP重命名插件的文件夹名称来禁用该插件。
通过重命名插件文件夹名称,通过SFTP禁用所有插件
像Cloudflare或Sucuri这样的CDN提供完整的代理服务,在它们的边缘服务器和你的源服务器之间有额外的防火墙。因此,您在使用它们时可能会更频繁地遇到HTTP 5xx错误。它们中的大多数缓存了您的源服务器返回的5xx错误,因此很容易对它们进行故障排除。
Cloudflare的免费计划容易引发5xx错误。不幸的是,因为它是一个完整的代理服务,所以没有快速的方法来禁用它。但在你为此责怪Cloudflare之前,请了解Cloudflare显示了 504 Gateway Timeout错误的两种变体。
Cloudflare中的504网关超时(变体 1)
当您站点的源服务器以标准HTTP 504响应进行响应时,Cloudflare将向您显示自定义504网关超时错误屏幕。
Cloudflare的自定义错误504屏幕
在这里,问题在于您的Web服务器而不是Cloudflare。您可以尝试使用下面提到的其他解决方案来修复它,或者联系您的托管服务提供商的支持以获得技术帮助。
Cloudflare的504网关超时(变体 2)
如果Cloudflare导致504 Gateway Timeout错误,错误屏幕将提及“cloudflare”,这是当前所有Cloudflare资产的标准服务器名称。通常,错误屏幕将显示如下:
Cloudflare导致的504网关超时错误屏幕
由于Cloudflare本身没有响应,因此您不会在此处看到任何带有Cloudflare品牌的错误屏幕。
最有可能的是,Cloudflare已经意识到这个问题并且正在着手修复。您可以通过查看Cloudflare系统状态网页来确认这一点。或者,您可以联系Cloudflare支持以更快地解决问题。
在cloudflarestatus.com检查Cloudflare系统状态
由于大量上传,Cloudflare的504网关超时
上传到站点的大小也可能是服务器超时的原因。Cloudflare将Free和Pro计划的上传文件大小(每个HTTP POST请求)限制为100MB。
Cloudflare对各种计划的“最大上传大小”限制
问题可能出在您的主机端或Cloudflare。您可以通过使用DNS主机文件绕过Cloudflare并再次尝试上传来找出确切原因。
如果您将Cloudflare与WordPress一起使用,我建议您使用他们的免费插件并从缓存中排除关键URL(例如WordPress管理仪表盘)。
服务器问题(请咨询您的主机)
服务器问题是面临504网关超时错误的最常见原因之一。由于大多数WordPress站点都托管在Nginx或Apache网络服务器上,因此Nginx或Apache正在等待某物的响应并超时。
大多数提供共享托管计划的 WordPress 主机都没有此功能。因此,与您的服务器托管在同一台服务器上的高流量站点也可能导致您的站点抛出504错误。
过载的服务器并不是服务器超时的唯一原因。504错误可能有许多其他原因:
缓慢的服务器基础设施
您用来托管WordPress站点的服务器可能没有足够的资源来处理负载。这就像在十年前的PC上玩现代图形密集型视频游戏。
服务器只是挂断了试图为网站提供服务。此问题的唯一解决方案是升级到具有更好基础架构的服务器。
需要更多PHP worker
PHP worker用于执行您的WordPress站点的代码。一个每月有50,000名访问者的电子商务网站比具有相同流量的简单博客需要更多的资源。如果所有服务器的PHP worker都忙,他们将建立一个队列。
当队列过大时,服务器会忽略旧的请求,这可能会导致服务器抛出504网关错误。您可以向您的房东咨询有关增加PHP worker数量的问题。这将允许您的站点同时执行多个请求。
防火墙问题
您服务器的防火墙可能有一些错误或配置不正确。也许,它的一些规则会阻止服务器正确建立连接。要知道防火墙是否是罪魁祸首,您可以检查服务器的错误日志。
网络连接问题
代理服务器和Web服务器之间的连接问题可能会导致响应HTTP请求的延迟。如果您使用负载平衡器,它也可能存在网络连接问题。
HTTP超时
当Web服务器和客户端之间的连接保持打开时间过长时,可能会发生HTTP超时。对于WordPress站点,这通常发生在运行WordPress导入时。解决此问题的一种方法是切换到更快的Internet连接。
您还可以使用支持WP-CLI的工具直接在服务器上运行脚本,完全绕过HTTP连接。例如,您可以使用wp import WP-CLI命令直接通过命令行界面运行WordPress Importer插件。
重要提示: 504网关超时错误类似于503服务不可用错误或502错误网关。但它们都是不同的。
要自行监控站点的停机时间,您可以使用updown.io之类的工具。它会通过向其发送HTTP请求来定期检查您网站的状态(或任何URL)。您可以将检查频率设置为15秒到1小时。如果您的网站没有正确响应,它会通过电子邮件或短信通知您。
使用updown.io轻松监控您的网站
您将通过updown.io的每个帐户获得大量免费积分,但如果您正在寻找更便宜的替代品,您可以查看WebGazer或UptimeRobot。这两种工具都将帮助您每5分钟免费监控您网站的正常运行时间。对于大多数网站所有者来说,这已经足够了。
WebGazer网站监控工具的仪表盘
监控您的网站将使您了解它的停机频率。如果您使用共享主机提供商,这将特别有用。大多数托管WordPress主机会自动为您处理此问题。因此,始终建议与他们一起去。
垃圾邮件、机器人或DDoS攻击
恶意攻击者可以通过发送过多和/或资源密集型请求来使您的Web服务器爬行。如果您的站点被机器人发送垃圾邮件或遭受DDoS攻击,它可能会使您的服务器不堪重负,并导致许多真正的用户出现 504 网关超时错误。
您可以查看服务器流量和分析,看看是否可以发现站点流量中的任何不规则模式。如果您使用宝塔面板管理您的网站,您可以通过监控管理查看相关数据。
宝塔面板监控管理界面
最后,您可以使用WordPress安全插件通过发现和阻止令人担忧的流量/IP 来增强您网站的安全性。您也可以要求您的主机阻止某些IP。
根据攻击的长度和规模,这可能是一个永无止境的将IP列入黑名单的过程,因为许多攻击者在被阻止后更改了他们的IP和代理地址。
您可以使用Cloudflare或Sucuri等专用安全解决方案来保护您的站点免受DDoS攻击和垃圾邮件机器人的侵害。有关更多信息,您可以安装Sucuri以阻止DDoS攻击。
损坏的WordPress数据库
有时,504网关超时错误可能是因为数据库损坏,尤其是在WordPress站点中。通常,这是由于损坏的数据库表或文件造成的。有时,它也可能是由严重的安全问题引起的,例如您的网站或数据库被黑客入侵。
修复损坏的WordPress数据库取决于问题。WP-DBManager之类的插件可以轻松诊断数据库问题并修复它们。我建议您阅读关于修复WordPress数据库问题的详细教程。
检查您网站的插件和主题
大多数情况下,第三方插件和主题不会导致504错误。但是它们有可能导致服务器超时,通常是通过将插件/主题生成的许多未缓存请求排队。由于这会占用大量服务器的PHP worker,因此可能会导致504错误。
这个问题的一个很好的例子是WooCommerce,这是一个安装插件,用于向WordPress网站添加电子商务功能。
解决此问题的最简单方法是停用所有插件。请记住,如果您只是停用插件,您不会丢失任何数据。
如果您可以访问管理仪表盘,则可以转到插件,从批量操作菜单中选择停用,选中所有插件,然后点击应用按钮。这将禁用您的所有插件。
通过WP管理仪表盘停用所有WordPress插件
如果您无法访问您的管理后台,您可以使用之前描述的方法通过SFTP禁用插件。只需重命名主插件文件夹名称即可批量禁用所有插件。
停用所有插件后,请检查您的网站是否正确加载。如果它有效,您必须激活每个插件,在启用每个插件后测试站点。
最后,确保您的插件、主题和WordPress核心是最新的。另外,请确保您的服务器正在运行推荐的PHP版本。
如果您觉得这太过分了,您可以随时向您的服务器提供商寻求帮助。
在最坏的情况下,例如低效查询或插件/主题中的错误代码,您可以聘请WordPress开发人员来解决问题。
检查错误日志
在对WordPress站点上的504错误进行故障排除和调试时,查看错误日志非常有用。这可以帮助您快速缩小网站上的问题,特别是如果它是由您网站上要求苛刻的插件引起的。
您可以通过将以下代码添加到wp-config.php文件来启用WordPress调试模式:
define( 'WP_DEBUG', true ); define( 'WP_DEBUG_LOG', true ); define( 'WP_DEBUG_DISPLAY', false );
WP_DEBUG不断启用或禁用WordPress的调试模式。它有两个可选的伴随常量,可以扩展其功能。WP_DEBUG_LOG
常量指示将所有错误保存到目录/wp-content/
中的debug.log文件中。如果您没有看到这个文件,您可以随时创建一个。
WP_DEBUG_DISPLAY
常量控制调试日志是否显示在HTML页面上。将此设置为false将隐藏所有错误,但您可以稍后查看错误,因为您也已将其定义WP_DEBUG_LOG
为true。
您还可以通过SFTP下载原始WordPress错误日志文件。通常,您可以在服务器根目录中名为“logs”的文件夹中找到错误日志。
通过SFTP访问WordPress错误日志文件夹
最后,您可以检查服务器日志文件。根据您用于托管WordPress站点的服务器,它们通常位于以下位置:
- Apache:
/var/log/apache2/error.log/
- nginx:
/var/log/nginx/error.log/
更多信息可以参考Apache或Nginx的日志相关文档。
正确配置Apache或Nginx设置
您可以编辑服务器配置文件以增加特定指令的资源限制。这可以帮助您解决504网关超时错误。
对于Apache 网络服务器
首先,将以下代码添加到您的httpd.conf:
TimeOut 600
此设置定义了服务器在将其标记为网络超时问题之前等待特定请求的时间。它的默认值为60秒(Apache 2.4版本)。
您只能在httpd.conf文件中添加此指令,而不能在.htaccess文件中添加。由于大多数共享主机提供商不允许你修改的httpd.conf文件,你可以尝试增加值LimitRequestBody指令在你的.htaccess文件来代替。
然后将以下行添加到您的php.ini文件中:
max_execution_time 300
PHP的max_execution_time指令的默认值为30 秒。增加它将使您网站的PHP脚本运行更长时间。
对于Nginx网络服务器
如果您在Nginx+FastCGI进程管理器 (PHP-FPM) 上运行WordPress站点或使用Nginx作为Apache的反向代理,您可以调整服务器设置以帮助防止504网关超时错误。
(1)Nginx+FastCGI (PHP-FPM)上的504网关超时错误
首先,您必须编辑PHP-FPM池配置文件。您可以在Nginx服务器中的/etc/php7.4/fpm/pool.d/www.conf
位置找到它(确切路径可能因PHP版本而异)。或者,您可以在终端中运行以下命令来编辑PHP-FPM池配置文件:
sudo nano /etc/php/7.2/fpm/pool.d/www.conf
接下来,设置以下指令:
request_terminate_timeout = 300
在此之后,您必须编辑您的php.ini文件。您可以在/etc/php.ini
找到它。打开文件并将max_execution_time
指令的值添加/更改为300秒。
max_execution_time = 300
最后,将以下代码添加到nginx.conf文件的位置块:
location ~ .php$ { ... fastcgi_read_timeout 300; }
重新加载Nginx和PHP-FPM以使更改生效。
sudo service nginx reload sudo service php7.4-fpm reload
重新加载PHP-FPM的确切代码将根据您的服务器上安装的PHP版本而有所不同。测试您的网站,看看它是否已解决问题。
(2)Nginx代理上的504网关超时错误
如果您使用Nginx作为Apache的反向代理服务器,那么您可以通过将以下指令添加到您的nginx.conf文件来使其对服务器超时更加宽容:
proxy_connect_timeout 600; proxy_send_timeout 600; proxy_read_timeout 600; send_timeout 600;
不要忘记在进行更改后重新加载Nginx。
sudo service nginx reload
其他HTTP错误,如504网关超时
正如文章前面提到的,许多其他HTTP 5xx错误就像504网关超时错误一样。这是因为它们都发生在服务器端。这些错误包括:
- 500内部服务器错误
- 501 Not Implemented
- 502错误网关
- 503服务不可用错误
由于客户端问题导致的其他HTTP错误,例如404 Not Found错误,也类似于504错误。您可以参考HTTP状态代码列表以获取更多信息。
小结
由于多种原因,您的WordPress网站可能会受到504网关超时错误的影响。在本文中,您学习了如何对它们进行故障排除。通常,这些错误是由服务器端问题引起的,在这种情况下,您可以联系您的主机并快速解决问题。
但是,您还必须了解,此错误可能是由于第三方插件、主题、服务、低效的数据库查询或其中两个或多个的组合造成的。如果您要最大限度地利用服务器资源(例如PHP worker),建议优化您的站点以提高性能。
如果您仍然发现您的网站超时,那么您很可能需要升级您的托管计划或增加PHP worker的数量。我建议您仅在用尽本文中描述的所有其他解决方案后才考虑此选项。