如何修复 WordPress 网站上的 500 内部服务器错误
已发表: 2017-12-25可怕的 500 内部服务器错误。 它似乎总是在最不合时宜的时候出现,而您突然间就开始争先恐后地想办法让您的 WordPress 网站重新上线。 相信我们,我们都去过那里。 您可能还看到过类似行为的其他错误,包括建立数据库连接的可怕错误和可怕的白屏死机。 但是从您的网站出现故障的那一刻起,您就会失去访问者和客户。 更不用说它看起来对您的品牌不利。
今天我们将深入探讨 500 内部服务器错误,并引导您通过一些方法让您的网站快速恢复在线。 阅读下面的更多信息,了解导致此错误的原因以及将来可以采取哪些措施来防止它发生。
- 什么是 500 内部服务器错误?
- 如何修复 500 内部服务器错误
500 内部服务器错误(最常见的原因):
WordPress 中的 500 内部服务器错误可能由多种原因引起。 如果您遇到这种情况,则很有可能是以下一种(或多种)因素导致了问题:
- 浏览器缓存。
- 数据库登录凭据不正确。
- 损坏的数据库。
- WordPress 安装中的文件损坏。
- 您的数据库服务器出现问题。
- 损坏的 WordPress 核心文件。
- 损坏的 .htaccess 文件和 PHP 内存限制。
- 第三方插件和主题的问题。
- 第三方插件的 PHP 超时或致命的 PHP 错误。
- 错误的文件和文件夹权限。
- 服务器上的 PHP 内存限制已用尽
- .htaccess 文件损坏或损坏。
- CGI 和 Perl 脚本中的错误。
查看我们修复 500 内部服务器错误的终极指南
什么是 500 内部服务器错误?
Internet 工程任务组 (IETF) 将 500 Internal Server Error 定义为:
500(内部服务器错误)状态代码表示服务器遇到了阻止它完成请求的意外情况。
当您访问网站时,您的浏览器会向托管该网站的服务器发送请求。 服务器接收该请求,对其进行处理,然后将请求的资源(PHP、HTML、CSS 等)连同 HTTP 标头一起发回。 HTTP 还包括他们所谓的 HTTP 状态代码。 状态码是一种通知您请求状态的方法。 它可能是 200 状态代码,表示“一切正常”,也可能是 500 状态代码,表示出现问题。
有很多不同类型的 500 状态错误代码(500、501、502、503、504 等),它们的含义都不同。 在这种情况下,500 内部服务器错误表示服务器遇到了阻止它完成请求的意外情况(RFC 7231,第 6.6.1 节)。

500 个内部服务器错误变化
由于各种 Web 服务器、操作系统和浏览器,500 内部服务器错误可能以多种不同的方式出现。 但他们都在交流同样的事情。 以下只是您可能在网络上看到的许多不同变体中的几个:
- “500内部服务器错误”
- “HTTP 500”
- “内部服务器错误”
- “HTTP 500 – 内部服务器错误”
- “500 错误”
- “HTTP 错误 500”
- “500内部服务器错误”
- “500内部服务器错误。 抱歉,出了一些问题。”
- “500。 那是一个错误。 有一个错误。 请稍后再试。 我们知道的就这些。”
- “该网站无法显示该页面 - HTTP 500。”
- “目前无法处理这个请求。 HTTP 错误 500。”
您可能还会看到以下消息:
服务器遇到内部错误或配置错误,无法完成您的请求。 请联系服务器管理员,[email protected] 并告知他们错误发生的时间,以及您可能所做的任何可能导致错误的事情。 服务器错误日志中可能提供有关此错误的更多信息。

其他时候,您可能只会看到一个空白的白色屏幕。 在处理 500 个内部服务器错误时,这实际上在 Firefox 和 Safari 等浏览器中很常见。

更大的品牌甚至可能有自己的自定义 500 条内部服务器错误消息,例如来自 Airbnb 的这条消息。

这是自述文件中的另一个创意 500 服务器错误示例。

即使是强大的 YouTube 也无法避免 500 个内部服务器错误。

如果它是 IIS 7.0 (Windows) 或更高版本的服务器,它们有额外的 HTTP 状态代码来更准确地指示 500 错误的原因:
- 500.0 – 发生模块或 ISAPI 错误。
- 500.11 – Web 服务器上的应用程序正在关闭。
- 500.12 – 应用程序正忙于在 Web 服务器上重新启动。
- 500.13 – Web 服务器太忙。
- 500.15 – 不允许直接请求 global.asax。
- 500.19 – 配置数据无效。
- 500.21 – 模块无法识别。
- 500.22 – ASP.NET httpModules 配置不适用于托管管道模式。
- 500.23 – ASP.NET httpHandlers 配置不适用于托管管道模式。
- 500.24 – ASP.NET 模拟配置不适用于托管管道模式。
- 500.50 – 在 RQ_BEGIN_REQUEST 通知处理期间发生重写错误。 发生配置或入站规则执行错误。
- 500.51 – GL_PRE_BEGIN_REQUEST 通知处理期间发生重写错误。 发生全局配置或全局规则执行错误。
- 500.52 – 在 RQ_SEND_RESPONSE 通知处理期间发生重写错误。 发生出站规则执行。
- 500.53 – 在 RQ_RELEASE_REQUEST_STATE 通知处理期间发生重写错误。 发生出站规则执行错误。 该规则配置为在更新输出用户缓存之前执行。
500.100 – 内部 ASP 错误。
500 个错误对 SEO 的影响
与用于 WordPress 维护模式并告诉 Google 稍后再检查的 503 错误不同,如果不立即修复,500 错误会对 SEO 产生负面影响。 如果您的网站仅停机了 10 分钟,并且它被持续抓取了很多次,那么抓取工具只会从缓存中获取页面。 或者,谷歌甚至可能没有机会在它备份之前重新抓取它。 在这种情况下,你完全没问题。
但是,如果网站长时间关闭,比如超过 6 小时,那么 Google 可能会将 500 错误视为需要解决的网站级别问题。 这可能会影响您的排名。 如果您担心重复 500 个错误,您应该从一开始就弄清楚它们发生的原因。 下面的一些解决方案可以提供帮助。
如何修复 500 内部服务器错误
当您在 WordPress 网站上看到 500 内部服务器错误时,您应该从哪里开始进行故障排除? 有时您甚至可能不知道从哪里开始。 通常 500 错误是在服务器本身,但根据我们的经验,这些错误源于两件事,第一是用户错误(客户端问题),第二是服务器有问题。 所以我们将深入研究两者。
这绝不是烦人的 pic.twitter.com/pPKxbkvI9K
— Dare Obasanjo (@Carnage4Life) 2019 年 9 月 26 日
查看这些常见原因和修复 500 内部服务器错误并立即恢复运行的方法。
1.尝试重新加载页面
这对某些人来说似乎有点明显,但是当遇到 500 内部服务器错误时,您应该尝试的最简单和首要的事情之一就是等待一分钟左右并重新加载页面(F5 或 Ctrl + F5)。 可能是主机或服务器只是过载了,该站点将立即恢复。 在等待期间,您也可以快速尝试使用其他浏览器来排除问题。
您可以做的另一件事是将网站粘贴到 downforeveryoneorjustme.com。 该网站会告诉您该网站是否已关闭或您是否有问题。 像这样的工具会检查从服务器返回的 HTTP 状态代码。 如果它不是 200 “一切正常”,那么它将返回一个向下指示。
我们还注意到,有时这可能会在您更新 WordPress 网站上的插件或主题后立即发生。 通常这是在未正确设置的主机上。 发生的事情是他们在之后经历了一个临时的超时。 但是,事情通常会在几秒钟内自行解决,因此您只需要刷新即可。
2.清除浏览器缓存
在深入调试站点之前,清除浏览器缓存始终是另一个很好的故障排除步骤。 以下是有关如何在各种浏览器中清除缓存的说明:
- 如何为所有浏览器强制刷新单个页面
- 如何清除谷歌浏览器的浏览器缓存
- 如何清除 Mozilla Firefox 的浏览器缓存
- 如何清除 Safari 的浏览器缓存
- 如何清除 Internet Explorer 的浏览器缓存
- 如何清除 Microsoft Edge 的浏览器缓存
- 如何清除 Opera 的浏览器缓存
3. 检查您的服务器日志
您还应该利用错误日志。 如果您是 Kinsta 客户,您可以在 MyKinsta 仪表板的日志查看器中轻松查看错误。 这可以帮助您快速缩小问题范围,特别是如果它是由您网站上的插件引起的。

如果您的主机没有日志记录工具,您还可以通过将以下代码添加到 wp-config.php 文件来启用 WordPress 调试模式以启用日志记录:
define( 'WP_DEBUG', true ); define( 'WP_DEBUG_LOG', true ); define( 'WP_DEBUG_DISPLAY', false );
日志通常位于 /wp-content 目录中。 其他人,比如 Kinsta 的这里,可能有一个名为“logs”的专用文件夹。

您还可以查看 Apache 和 Nginx 中的日志文件,它们通常位于此处:
- 阿帕奇: /var/log/apache2/error.log
- Nginx: /var/log/nginx/error.log
如果您是 Kinsta 客户,您还可以利用我们的分析工具来细分 500 个错误的总数,并查看它们发生的频率和时间。 如果这是一个持续存在的问题,或者可能已经自行解决,这可以帮助您进行故障排除。

在功能强大的集中式 MyKinsta 仪表板的日志查看器中轻松识别和解决错误。 免费试用 Kinsta。
如果由于致命的 PHP 错误而显示 500 错误,您还可以尝试启用 PHP 错误报告。 只需将以下代码添加到引发错误的文件中。 通常,您可以在 Google Chrome DevTools 的控制台选项卡中缩小文件范围。
ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL);
您可能还需要使用以下内容修改 php.ini 文件:
display_errors = on
4.建立数据库连接时出错
500 内部服务器错误也可能因数据库连接错误而发生。 根据您的浏览器,您可能会看到不同的错误。 但无论在您的服务器日志中,两者都会生成 500 HTTP 状态代码。
下面是一个“建立数据库连接错误”消息的示例,它看起来像您的浏览器。 整个页面是空白的,因为无法检索任何数据来呈现页面,因为连接无法正常工作。 这不仅会破坏您网站的前端,还会阻止您访问您的 WordPress 仪表板。


那么究竟为什么会发生这种情况呢? 好吧,以下是一些常见的原因。
- 最常见的问题是您的数据库登录凭据不正确。 您的 WordPress 站点使用单独的登录信息连接到其 MySQL 数据库。
- 您的 WordPress 数据库已损坏。 有这么多带有主题、插件和用户不断删除和安装它们的移动部件,有时数据库会损坏。 这可能是由于表丢失或个别损坏,或者某些信息可能被意外删除。
- 您的 WordPress 安装中可能有损坏的文件。 这有时甚至可能由于黑客而发生。
- 您的数据库服务器出现问题。 Web 主机端可能出现许多问题,例如数据库因流量高峰而过载或因太多并发连接而无响应。 这实际上在共享主机中很常见,因为它们为同一服务器上的许多用户使用相同的资源。
查看我们关于如何修复在 WordPress 中建立数据库连接的错误的深入文章。
5. 检查你的插件和主题
第三方插件和主题很容易导致 500 内部服务器错误。 我们已经在 Kinsta 看到了所有类型,从滑块插件到广告轮播插件。 很多时候,您应该在安装新内容或运行更新后立即看到错误。 这就是为什么我们总是建议使用暂存环境进行更新或至少一个一个地运行更新的原因之一。 否则,如果您遇到 500 内部服务器错误,您会突然争先恐后地找出导致它的原因。
解决此问题的几种方法是停用所有插件。 请记住,如果您只是停用插件,您不会丢失任何数据。 如果您仍然可以访问您的管理员,一个快速的方法是浏览到“插件”并从批量操作菜单中选择“停用”。 这将禁用所有插件。

如果这解决了问题,您将需要找到罪魁祸首。 开始一一激活,每次激活后重新加载站点。 当您看到 500 内部服务器错误返回时,您已经找到了行为不端的插件。 然后,您可以联系插件开发人员寻求帮助或在 WordPress 存储库中发布支持票。
如果您无法登录 WordPress 管理员,您可以通过 FTP 进入您的服务器并将您的插件文件夹重命名为 plugins_old 之类的名称。 然后再次检查您的网站。 如果它有效,那么您将需要一个一个地测试每个插件。 将您的插件文件夹重命名为“plugins”,然后将其中的每个插件文件夹一一重命名,直到找到它为止。 您也可以尝试先在临时站点上复制它。

始终确保您的插件、主题和 WordPress 核心是最新的。 并检查以确保您正在运行受支持的 PHP 版本。 如果结果证明与插件中的错误代码冲突,您可能需要聘请 WordPress 开发人员来解决问题。
6.重新安装WordPress核心
有时 WordPress 核心文件可能会损坏,尤其是在旧网站上。 实际上,在不影响您的插件或主题的情况下重新上传 WordPress 的核心非常容易。 我们有一个深入的指南,其中包含 5 种不同的方式来重新安装 WordPress。 当然,请确保在继续之前进行备份。 跳至以下部分之一:
- 如何在保留现有内容的同时从 WordPress 仪表板重新安装 WordPress
- 如何在保留现有内容的同时通过 FTP 手动重新安装 WordPress
- 如何在保留现有内容的同时通过 WP-CLI 手动重新安装 WordPress
7.权限错误
服务器上的文件或文件夹的权限错误也可能导致发生 500 内部服务器错误。 以下是关于 WordPress 中文件和文件夹权限的一些典型权限建议:
- 所有文件应为 644 (-rw-r–r–) 或 640。
- 所有目录应为 755 (drwxr-xr-x) 或 750。
- 任何目录都不应该被赋予 777,即使是上传目录。
- 加固: wp-config.php 也可以设置为 440 或 400 以防止服务器上的其他用户读取它。
有关更深入的说明,请参阅有关更改文件权限的 WordPress Codex 文章。
您可以使用 FTP 客户端轻松查看您的文件权限(如下所示)。 您还可以联系您的 WordPress 主机支持团队,要求他们快速 GREP 对您的文件夹和文件的文件权限,以确保它们设置正确。

8. PHP 内存限制
500 内部服务器错误也可能是由于服务器上的 PHP 内存限制用尽而引起的。 您可以尝试增加限制。 请按照以下说明在 cPanel、Apache、您的 php.ini 文件和wp-config.php
文件中更改此限制。
增加 cPanel 中的 PHP 内存限制
如果您在使用 cPanel 的主机上运行,则可以从 UI 轻松更改此设置。 在软件下单击“选择 PHP 版本”。

单击“切换到 PHP 选项”。

然后,您可以单击memory_limit
属性并更改其值。 然后点击“保存”。

增加 Apache 中的 PHP 内存限制
.htaccess
文件是一个特殊的隐藏文件,其中包含可用于修改服务器行为的各种设置,一直到目录特定级别。 首先通过 FTP 或 SSH 登录到您的站点,查看您的根目录,看看那里是否有.htaccess
文件。

如果有,您可以编辑该文件以添加必要的代码以增加 PHP 内存限制。 最有可能设置为64M或以下,您可以尝试增加此值。
php_value memory_limit 128M
在 php.ini 文件中增加 PHP 内存限制
如果上述方法不适合您,可以尝试编辑您的php.ini
文件。 通过 FTP 或 SSH 登录到您的站点,转到您站点的根目录并打开或创建一个php.ini
文件。

如果该文件已经存在,请搜索这三个设置并在必要时对其进行修改。 如果您刚刚创建了文件,或者找不到设置,您可以粘贴下面的代码。 您当然可以修改这些值以满足您的需要。
memory_limit = 128M
一些共享主机可能还要求您在.htaccess
文件中添加 suPHP 指令,以使上述php.ini
文件设置生效。 为此,请编辑您的.htaccess
文件,该文件也位于您网站的根目录,并在文件顶部添加以下代码:
<IfModule mod_suphp.c> suPHP_ConfigPath /home/yourusername/public_html </IfModule>
如果上述方法对您不起作用,则可能是您的主机锁定了全局设置,而是将其配置为使用.user.ini
文件。 要编辑您的.user.ini
文件,请通过 FTP 或 SSH 登录到您的站点,转到您站点的根目录并打开或创建一个.user.ini
文件。 然后,您可以粘贴以下代码:
memory_limit = 128M
在 wp-config.php 中增加 PHP 内存限制
最后一个选项不是我们的粉丝,但如果所有其他方法都失败了,你可以试一试。 首先,通过 FTP 或 SSH 登录到您的站点,然后找到您的 wp-config.php 文件,该文件通常位于您站点的根目录中。

将以下代码添加到wp-config.php
文件的顶部:
define('WP_MEMORY_LIMIT', '128M');
您还可以询问您的主机是否遇到内存限制问题。 我们在 Kinsta 使用 Kinsta APM 工具和其他故障排除方法来帮助客户缩小可能超出限制的插件、查询或脚本的范围。 您还可以使用您自己的许可证中的自定义 New Relic 密钥。

9. .htaccess 文件有问题
Kinsta 仅使用 Nginx,但如果您使用的是运行 Apache 的 WordPress 主机,则很可能是您的.htaccess
文件有问题或已损坏。 请按照以下步骤从头开始重新创建一个新的。
首先,通过 FTP 或 SSH 登录到您的站点,并将您的.htaccess
文件重命名为.htaccess_old
。

通常要重新创建此文件,您只需在 WordPress 中重新保存您的永久链接。 但是,如果您遇到 500 个内部服务器错误,您很可能无法访问您的 WordPress 管理员,所以这不是一个选项。 因此,您可以创建一个新的.htaccess
文件并输入以下内容。 然后上传到你的服务器。
# BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # END WordPress
有关更多示例,请参阅 WordPress Codex,例如用于多站点的默认.htaccess
文件。
10. CGI/Perl 脚本中的编码或语法错误
由 CGI 和 Perl 中的错误引起的 500 错误比以前少了很多。 虽然它仍然值得一提,尤其是对于那些使用 cPanel 的人来说,仍然有很多一键式 CGI 脚本仍在使用。 正如 Stack Overflow 上的 AEM 所说:
CGI 已被各种 Web 编程技术所取代,包括 PHP、各种 Apache 扩展(如 mod_perl)、各种风格的 Java 和框架(包括 Java EE、Struts、Spring 等)、基于 Python 的框架(如 Django、Ruby on Rails 等)其他 Ruby 框架和各种 Microsoft 技术。
以下是使用 CGI 脚本时的一些提示:
- 编辑时,总是使用纯文本编辑器,例如 Atom、Sublime 或 Notepad++。 这可确保它们保持 ASCII 格式。
- 确保在 CGI 脚本和目录上使用 chmod 755 的正确权限。
- 以 ASCII 模式(您可以在 FTP 编辑器中选择)将您的 CGI 脚本上传到服务器上的 cgi-bin 目录。
- 确认您的脚本所需的 Perl 模块已安装并受支持。
在功能强大的集中式 MyKinsta 仪表板的日志查看器中轻松识别和解决错误。 免费试用 Kinsta。
11. 服务器问题(与您的主机核实)
最后,由于PHP 超时或第三方插件的致命 PHP 错误也可能发生 500 个内部服务器错误,因此您可以随时与您的 WordPress 主机联系。 有时,如果没有专家,这些错误可能很难解决。 以下只是一些常见错误示例,这些错误会在服务器上触发 500 个 HTTP 状态代码,可能会让您摸不着头脑。
PHP message: PHP Fatal error: Uncaught Error: Call to undefined function mysql_error()...
PHP message: PHP Fatal error: Uncaught Error: Cannot use object of type WP_Error as array in /www/folder/web/shared/content/plugins/plugin/functions.php:525
我们在 Kinsta 监控所有客户的站点,并在发生这些类型的错误时自动通知。 这使我们能够积极主动并立即开始解决问题。 我们还为每个站点使用 LXD 托管主机和编排的 LXC 软件容器。 这意味着每个 WordPress 站点都位于其自己的隔离容器中,该容器具有运行它所需的所有软件资源(Linux、Nginx、PHP、MySQL)。 这些资源是 100% 私有的,不会与其他任何人甚至您自己的网站共享。
PHP 超时也可能由于缺少 PHP 工作者而发生,尽管这些通常会导致 504 错误,而不是 500 错误。 这些决定了您的站点在给定时间可以处理多少并发请求。 简而言之,您网站的每个未缓存请求都由 PHP Worker 处理。
当 PHP 工作者已经在一个站点上忙碌时,他们开始建立一个队列。 一旦达到 PHP 工作人员的限制,队列就会开始推出较旧的请求,这可能会导致 500 个错误或不完整的请求。 阅读我们关于 PHP 工作者的深入文章。
监控您的网站
如果您担心将来会在您的网站上发生这些类型的错误,您还可以使用 updown.io 之类的工具来监控并在它们发生时立即通知您。 它会定期向您选择的 URL 发送 HTTP HEAD 请求。 您可以简单地使用您的主页。 该工具允许您设置以下检查频率:
- 15 秒
- 30秒
- 1分钟
- 2分钟
- 5分钟
- 10分钟
如果您的网站出现故障,它将向您发送一封电子邮件。 下面是一个例子。
如果您正在尝试调试有故障的插件或在共享主机上,这可能特别有用,这些主机往往会过度拥挤他们的服务器。 这可以让您证明您的网站实际上可能多久关闭一次(即使是在半夜)。 这就是为什么我们总是建议使用托管 WordPress 主机。 请务必查看我们的帖子,其中探讨了选择托管 WordPress 托管的 9 大理由。
概括
500 个内部服务器错误总是令人沮丧,但希望现在您知道了一些其他方法来解决它们,以快速让您的网站恢复运行。 请记住,这些类型的错误通常是由第三方插件、致命的 PHP 错误、数据库连接问题、您的 .htaccess 文件或 PHP 内存限制问题以及有时 PHP 超时引起的。
我们错过了什么吗? 也许您有另一个解决 500 个内部服务器错误的技巧。 如果是这样,请在下面的评论中告诉我们。