- 错误类型:
- HTTP错误
- 错误名称:
- 500内部服务器错误
- 英文名称:
- 500 Internal Server Error
- 错误描述:
- WordPress中的500内部服务器错误可能由多种原因引起。如果您遇到这种情况,很有可能是以下一个(或多个)因素导致了问题。
可怕的500内部服务器错误(500 Internal Server Error)。它似乎总是在最不合时宜的时候出现,而您突然之间争先恐后地想办法让您的WordPress网站重新上线。相信我们,我们都去过那里。您可能还见过的其他行为类似的错误包括建立数据库连接错误和可怕的死亡白屏。但是从您的网站出现故障的那一刻起,您就会失去访问者和客户。更不用说它看起来对您的品牌不利。
今天,我们将深入探讨500内部服务器错误,并引导您通过一些方法让您的网站快速恢复在线。阅读下面的更多信息,了解导致此错误的原因以及您可以采取哪些措施来防止将来出现此错误。
500内部服务器错误(最常见的原因):
WordPress中的500内部服务器错误可能由多种原因引起。如果您遇到这种情况,很有可能是以下一个(或多个)因素导致了问题:
- 浏览器缓存。
- 数据库登录凭据不正确。
- 损坏的数据库。
- WordPress安装中的文件损坏。
- 您的数据库服务器的问题。
- 损坏的WordPress核心文件。
- 第三方插件和主题的问题。
- 第三方插件的PHP超时或致命的PHP错误。
- 错误的文件和文件夹权限。
- 您的服务器上已用尽的PHP内存限制
- 损坏的.htaccess 文件。
- CGI和 Perl脚本错误。
什么是500内部服务器错误?
IETF将500内部服务器错误定义为:
500(内部服务器错误)状态代码表示服务器遇到了阻止其完成请求的意外情况。
当您访问网站时,您的浏览器会向托管该网站的服务器发送请求。服务器接受此请求,对其进行处理,然后将请求的资源(PHP、HTML、CSS 等)连同HTTP标头一起发回。HTTP还包括他们所谓的HTTP状态代码。状态代码是一种通知您请求状态的方式。它可能是200状态代码,表示“一切正常”或500状态代码,表示出现问题。
有很多不同类型的500个状态错误代码(500的501,502,503,504等),都意味着不同的东西。在这种情况下,500内部服务器错误表示服务器遇到了阻止其完成请求的意外情况 (RFC7231,第 6.6.1 节)。
WordPress网站遭遇500内部服务器错误
500内部服务器错误变体
由于Web服务器、操作系统和浏览器的不同,500内部服务器错误可能会以多种不同的方式出现。但他们都在传达同样的事情。以下只是您可能在网络上看到的众多不同变体中的几个:
-
- “500 Internal Server Error”
- “HTTP 500”
- “Internal Server Error”
- “HTTP 500 – Internal Server Error”
- “500 Error”
- “HTTP Error 500”
- “500 – Internal Server Error”
- “500 Internal Server Error. Sorry something went wrong.”
- “500. That’s an error. There was an error. Please try again later. That’s all we know.”
- “The website cannot display the page – HTTP 500.”
- “Is currently unable to handle this request. HTTP ERROR 500.”
您可能还会看到此消息随附:
服务器遇到内部错误或配置错误,无法完成您的请求。请联系服务器管理员webmaster@domain.com并告知他们错误发生的时间,以及您可能执行的任何可能导致错误的操作。服务器错误日志中可能提供有关此错误的更多信息。
内部服务器错误
其他时候,您可能只会看到一个空白的白色屏幕。在处理500内部服务器错误时,这实际上在Firefox和Safari等浏览器中很常见。
Firefox中的500内部服务器错误
大品牌甚至可能有自己的自定义500内部服务器错误消息,例如来自Airbnb的这条消息。
Airbnb 500内部服务器错误
这是来自readme的另一个创造性的500服务器错误示例。
readme网站500内部服务器错误
即使是强大的YouTube也无法避免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的影响
与503错误不同,后者用于WordPress维护模式并告诉Google稍后再检查,如果不立即修复,500错误可能会对SEO产生负面影响。如果您的网站仅关闭了10分钟,并且它一直被抓取很多次,则抓取工具只会从缓存中获取页面。或者谷歌甚至可能没有机会在它备份之前重新抓取它。在这种情况下,您完全没问题。
但是,如果站点长时间关闭,例如6个小时以上,那么Google可能会将500错误视为需要解决的站点级别问题。这可能会影响您的排名。如果您担心重复500错误,您应该弄清楚为什么会发生这些错误。下面的一些解决方案可以提供帮助。
如何修复500内部服务器错误
当您在WordPress网站上看到500内部服务器错误时,您应该从哪里开始进行故障排除?有时您甚至可能不知道从哪里开始。通常500错误是在服务器本身,但根据我们的经验,这些错误源于两件事,第一是用户错误(客户端问题),第二是服务器有问题。所以我们将深入探讨两者。
查看这些常见原因和修复500内部服务器错误的方法,并立即恢复运行。
1. 尝试重新加载页面
这对某些人来说似乎有点明显,但是当遇到500内部服务器错误时,您应该尝试的最简单和首要的事情之一就是等待一分钟左右,然后重新加载页面(F5或Ctrl + F5)。可能是主机或服务器过载,站点会立即恢复。在等待期间,您也可以快速尝试不同的浏览器以排除该问题。
您可以做的另一件事是将该网站粘贴到downforeveryoneorjustme.com中。该网站会告诉您该网站是否已关闭或是否对您有问题。像这样的工具检查从服务器返回的HTTP状态代码。如果它不是200“一切正常”,那么它将返回一个向下的指示。
downforeveryoneorjustme网站
我们还注意到,有时这会在您更新WordPress网站上的插件或主题后立即发生。通常这是在未正确设置的主机上。发生的事情是他们之后会遇到临时超时。但是,事情通常会在几秒钟内自行解决,因此您只需刷新即可。
2. 清除浏览器缓存
在深入调试站点之前,清除浏览器缓存始终是另一个很好的故障排除步骤。以下是有关如何清除各种浏览器中的缓存的说明:
- 如何强制刷新所有浏览器的单个页面
- 如何清除 Google Chrome 的浏览器缓存
- 如何清除 Mozilla Firefox 的浏览器缓存
- 如何清除 Safari 的浏览器缓存
- 如何清除 Internet Explorer 的浏览器缓存
- 如何清除 Microsoft Edge 的浏览器缓存
- 如何清除 Opera 的浏览器缓存
3. 检查您的服务器日志
您还应该利用您的错误日志。如果您是宝塔面板客户,则可以在宝塔面包你仪表盘的安全管理中的Web日志管理轻松查看错误。这可以帮助您快速缩小问题的范围,特别是如果它是由您网站上的插件引起的。
检查错误日志中的500内部服务器错误
如果您的主机没有日志记录工具,您还可以通过将以下代码添加到wp-config.php文件来启用日志记录来启用WordPress调试模式:
define( ‘WP_DEBUG_LOG’, true );
define( ‘WP_DEBUG_DISPLAY’, false );
define( 'WP_DEBUG', true ); define( 'WP_DEBUG_LOG', true ); define( 'WP_DEBUG_DISPLAY', false );
日志通常位于/wp-content目录
WordPress错误日志文件夹 (SFTP)
您还可以查看Apache和Nginx中的日志文件,它们通常位于此处:
- Apache: /var/log/apache2/error.log
- Nginx: /var/log/nginx/error.log
如果由于PHP致命错误而显示500错误,您还可以尝试启用PHP错误报告。只需将以下代码添加到引发错误的文件中即可。通常,您可以在Google Chrome DevTools的控制台选项卡中缩小文件范围。
ini_set(‘display_startup_errors’, 1);
error_reporting(E_ALL);
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内部服务器错误。很多时候,您应该在安装新内容或运行更新后立即看到错误。这就是为什么我们总是建议使用暂存环境进行更新或至少一个一个地运行更新的原因之一。否则,如果您遇到500内部服务器错误,您会突然争先恐后地找出是哪个错误造成的。
解决此问题的几种方法是停用所有插件。请记住,如果您只是停用插件,您不会丢失任何数据。如果您仍然可以访问您的管理员,一个快速的方法是浏览到“插件”并从批量操作菜单中选择“停用”。这将禁用您的所有插件。
停用所有插件
如果这解决了问题,您将需要找到罪魁祸首。开始一一激活它们,每次激活后重新加载站点。当您看到500内部服务器错误返回时,您就发现了行为不端的插件。然后,您可以联系插件开发人员寻求帮助或在WordPress插件库中发布技术支持留言。
如果您无法登录WordPress管理盘,您可以通过FTP进入您的服务器并将您的插件文件夹重命名为 plugins_old 之类的名称。然后再次检查您的网站。如果它有效,那么您将需要一个一个地测试每个插件。将您的插件文件夹重命名回“plugins”,然后将每个插件文件夹一一重命名,直到找到为止。您也可以先尝试在临时站点上复制此内容。
重命名插件文件夹
始终确保您的插件、主题和WordPress核心是最新的。并检查以确保您运行的是受支持的PHP版本。如果结果证明与插件中的错误代码有冲突,您可能需要找技术人员协助解决问题。
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文件权限,以确保它们设置正确。
文件权限SFTP
8. PHP内存限制
耗尽服务器上的PHP内存限制也可能导致500内部服务器错误。您可以尝试增加限制。请按照以下说明更改cPanel、Apache、php.ini文件和wp-config.php
文件中的此限制。
增加cPanel中的PHP内存限制
如果您在使用cPanel的主机上运行,则可以从 UI 轻松更改此设置。在“软件”下单击“选择PHP版本”。
选择PHP版本
单击“切换到PHP选项”。
文件权限SFTP
然后,您可以单击该memory_limit
属性并更改其值。然后点击“保存”。
增加cPanel中的PHP内存限制
增加Apache中的PHP内存限制
.htaccess
文件是一个特殊的隐藏文件,其中包含可用于修改服务器行为的各种设置,一直到目录特定级别。首先通过FTP或SSH登录您的站点,查看您的根目录,看看那里是否有.htaccess
文件。
.htaccess文件
如果有,您可以编辑该文件以添加必要的代码以增加PHP内存限制。很可能设置在64M或以下,您可以尝试增加此值。
php_value memory_limit 128M
增加php.ini文件中的PHP内存限制
如果上述方法对您不起作用,您可以尝试编辑您的php.ini
文件。通过FTP或SSH登录到您的站点,转到站点的根目录并打开或创建一个php.ini
文件。
php.ini文件
如果文件已经存在,请搜索三个设置并在必要时修改它们。如果您刚刚创建了文件,或者找不到设置,您可以粘贴下面的代码。您当然可以修改这些值以满足您的需要。
memory_limit = 128M
某些共享主机可能还要求您在.htaccess
文件中添加 suPHP 指令以使上述php.ini
文件设置生效。为此,请编辑.htaccess
同样位于站点根目录下的文件,并将以下代码添加到文件顶部:
suPHP_ConfigPath /home/yourusername/public_html
</IfModule>
<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文件
将以下代码添加到wp-config.php
文件的顶部:
define('WP_MEMORY_LIMIT', '128M');
您还可以询问您的主机是否遇到内存限制问题。你也可以使用New Relic和其他故障排除方法来帮助客户缩小可能会耗尽限制的插件、查询或脚本的范围。您还可以使用您自己的自定义New Relic密钥。
使用New Relic调试
9. .htaccess文件的问题
如果您使用的是运行Apache的WordPress主机,则很可能您的.htaccess
文件有问题或已损坏。按照以下步骤从头开始重新创建一个新的。
首先,通过FTP或SSH登录到您的站点,并将您的.htaccess
文件重命名为.htaccess_old
.
重命名 .htaccess文件
通常要重新创建此文件,您只需在WordPress中重新保存固定链接即可。但是,如果您遇到500内部服务器错误,您很可能无法访问您的WordPress管理员,因此这不是一个选项。因此,您可以创建一个新.htaccess
文件并输入以下内容。然后将其上传到您的服务器。
<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
# 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,例如multisite的默认.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格式。
- 确保chmod 755的正确权限用于CGI脚本和目录。
- 将ASCII模式的CGI脚本(可以在FTP编辑器中选择)上传到服务器上的cgi-bin目录中。
- 确认您的脚本所需的Perl模块已安装并受支持。
11. 服务器问题(请咨询您的主机)
最后,由于PHP超时或第三方插件的致命PHP错误也可能导致500内部服务器错误,因此您可以随时查看您的WordPress主机。有时,如果没有专家,这些错误可能很难解决。以下是一些常见错误示例,这些错误会在服务器上触发500 HTTP状态代码,可能会让您摸不着头脑。
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
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
PHP超时也可能由于缺少PHP工作器而发生,尽管通常这些会导致504错误,而不是500错误。这些决定了您的站点在给定时间可以处理的并发请求数。简而言之,您网站的每个未缓存请求都由PHP Worker处理。
当PHP工作人员已经在站点上忙碌时,他们开始建立队列。一旦达到PHP工作线程的限制,队列就会开始推出较旧的请求,这可能会导致500错误或不完整的请求。
监控您的网站
如果您担心将来在您的网站上发生这些类型的错误,您还可以使用updown.io之类的工具 来监控并在发生时立即通知您。它会定期向您选择的URL发送HTTP HEAD请求。您可以简单地使用您的主页。该工具允许您设置以下检查频率:
- 15 秒
- 30秒
- 1分钟
- 2分钟
- 5分钟
- 10分钟
如果您的网站出现故障,它会向您发送一封电子邮件。下面是一个例子。
500错误的电子邮件通知
如果您正在尝试调试有问题的插件或在共享主机上,这些主机往往会使服务器过度拥挤,这将特别有用。这可以让您证明您的网站实际上可能关闭的频率(即使是在半夜)。
小结
500内部服务器错误总是令人沮丧,但希望现在您知道了一些其他方法来解决这些错误,以快速使您的站点恢复运行。请记住,这些类型的错误通常是由第三方插件、致命的PHP错误、数据库连接问题、.htaccess文件或PHP内存限制问题以及有时PHP超时引起的。