HTTP 状态代码提供有关在线请求是否成功的信息,如果不成功,则错误是什么。 但是错误消息并不总是很清楚。 “500 内部服务器错误”尤其如此。 此消息表示在连接到服务器期间发生错误,并且无法访问所请求的页面。 但是,它不会告诉你为什么会这样。 幸运的是,有不同的方法可以找到原因。 大眼仔指出了典型的错误来源,并提供了有关遇到 HTTP 错误 500 时该怎么做的提示。
HTTP 500 内部服务器错误
内部服务器错误是什么意思?
Web 服务器使用状态代码告诉互联网用户的浏览器(客户端)请求(即访问网站)是否成功。 如果浏览器收到 200 状态码,就知道一切顺利。 但是,用户永远不会看到此消息,因为出现的是请求的内容。 400 和 500 状态码的情况不同。 前者指示客户端错误,而后者与服务器相关。 Internal Server Error 500 是服务器错误的集合状态代码。 因此,乍一看,无法确定错误究竟出在哪里。 用户只知道服务器报告了意外错误。
但是,如果服务器安装了 Microsoft Internet Information Services (Microsoft IIS),则会指定错误代码。 小数位更详细地指出了错误的原因:
-
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 的原因是什么?
当 Web 服务器处理请求时,可能会发生“内部服务器错误”。 集体状态代码包括服务器上可能发生并阻止网站加载的所有计划外情况。 服务器错误 500 的发生可能是因为 Web 服务器的配置发生了错误。 以下是一些典型的错误来源:
-
权限错误:主要文件和文件夹的权限设置不正确。
-
PHP 超时:脚本尝试访问外部资源并遇到超时。
-
.htaccess 中的错误代码:.htaccess 文件中的结构可能有误。
-
CGI/Perl 脚本中的语法或代码错误:在某些情况下,脚本不正确。 特别是路径可能会错位。
-
PHP 内存限制:进程超出内存,无法正确执行。
对于 WordPress 网站或其他内容管理系统,安装错误或不兼容的扩展也可能是原因。 插件和主题(尤其是来自第三方提供商的)会影响整个网站。
网站运营者如何解决 500 内部服务器错误?
您的网站访问者是否只看到 500 服务器错误? 作为运营者,您应该迅速解决这个问题,因为这不仅会吓跑您的访问者,而且还可能意味着百度、Google 会降低您的排名。 在您采取行动之前,请先检查您的服务器是否仍在运行。 如果没有,请尽快联系您的托管服务提供商。
如果存在内部错误,第一步是查看日志文件。 对于 Linux 服务器,应在 /var/log/httpd/error_log 中找到错误消息的集合。 重新加载网站以重现 HTTP 错误 500 代码并观察日志文件的创建方式是有意义的。 这将帮助您快速找到错误的来源。 还要考虑不久之前进行了哪些更改。 在许多情况下,错误编程或不兼容的插件是错误消息的原因。
如果您没有为重要文件正确设置权限,也会出现错误。 一般来说,权限分为三种:
-
读取 (r)
-
写入 (w)
-
执行 (x)
可以为三种不同的用户类型分配这些权限:
-
文件的拥有者
-
用户组
-
所有其他人
权限以缩写 r、w 和 x 或相应的数值指定:4 表示读取,2 表示写入,1 表示执行。 它们是为每种用户类型添加的,并一个接一个地指定:rwxr-xr-x(所有者为 rwx,组为 r-x,所有其他用户为 r-x)或 755。此配置 (755) 应该是默认设置。 如果权限分配设置不同,可能会发生错误。 您可以使用以下命令更改此设置:
1 | chmod 755 filename |
如果此更改不能解决问题,您还可以释放每个组的所有权限以进行测试:
1 | chmod 777 filename |
但是只能使用这个设置来定位问题。 允许任何用户重写该文件,这是可以理解的安全风险。
接下来,检查(如果分发权限没有产生错误消息)您的脚本是否正确运行。 有时会出现错误,因为脚本文件已被移动、重命名或删除。 还要检查 .htaccess 文件:即使是语法错误(无论多么小)都可能导致内部服务器错误。 一个同样常见的错误是不正确地格式化 .htaccess 文件。 这必须以 ASCII 或 ANSI 格式创建,而不是 Unicode。 因此,请在记事本、Notepad++ 或 Sublime Text 等文本编辑器中编写文件,而不要在 Microsoft Word 等文字处理程序中编写文件。 要测试是否是该文件导致的错误,您可以暂时重命名并重新加载网站。 服务器现在在加载网站时不会访问 .htaccess。 如果您不再收到错误消息,您可以修复该文件或创建一个新文件。
超时也可能导致错误消息。 在这种情况下,这不是 Web 服务器错误,而是与外部源的连接中断。 您网站上的 PHP 脚本是否设置为从其他服务器访问资源? 也许资源不再可用或服务器通信因其他原因而中断。 消除这种错误来源的一种方法当然是不要让您的站点依赖外部资源。 如果这不可能,您可以增加脚本的时间限制。 实施有效的错误处理也很有意义,这样可以更准确地检测到 PHP 脚本中的错误。
会不会是内存超载了? 内存限制决定了一个进程可以使用多少内存。 如果需要的 RAM 多于可用的 RAM,这可能会导致内部服务器错误。 您可以增加限制作为临时解决方案。 为此,请将如下命令添加到 php.ini:
1 | memory_limit = 512M |
在此示例中,您会将提供的内存设置为 512MB。 但是请注意,您的托管服务提供商只允许您在预订的套餐中使用特定的 PHP 脚本。 如果您输入一个更高的值,Web 服务器将忽略它。 提高限制只是一个临时解决方案:一旦您的网站重新启动并运行,您应该寻找 RAM 使用率高的原因。 很有可能在您网站的代码中发现错误。
如果这些方法都不能为您提供解决方案,最好联系您的托管服务提供商。 在此之前,您可以检查服务器的状态:许多托管服务提供商会通过状态页面报告其服务器的状态,或者在出现问题时通过社交媒体通知用户。
互联网用户应该如何响应 HTTP 错误 500?
作为网站访问者,如果遇到内部服务器错误,您几乎无能为力。 目标网站所在的网络服务器配置不正确。 这意味着您的 PC 设置或网络连接设置没有错误。 因此,对于互联网用户来说,最简单的解决方案通常是稍后重新加载页面。 一方面,有可能站长已经更正了错误。 这是很有可能的,尤其是对于大型供应商。 另一方面,可能是您试图在网络服务器不方便的时间访问该网站。 如果您选择了服务重新启动的确切时间,即使一切都在计划中,也会显示错误消息。
注意
如果您在网上订购时遇到错误信息,请不要重新加载网页,因为您看不到错误发生的位置。 可能是确认页面加载失败,但系统已经接受了您的订单。 因此,刷新页面可能会导致重复订单。
也有可能是页面浏览量的急剧增加导致服务器突然宕机。 这个问题通常会在几秒钟内解决 – 除非网站永久超载。 如果刷新页面后仍然收到错误消息,您应该先清除浏览器的缓存。 浏览器实际上可能不会重新加载网站,而是使用其内部存储器。 清空缓存后,再次尝试访问网站。
如果仍然显示“500 内部服务器错误”,那你就别无选择,只能等待网站运营商解决问题。 但是,您可以使用一个小技巧来访问网站的内容。 如果您不依赖于(功能)页面的最新状态,您可以访问谷歌缓存。 如果您在谷歌搜索栏中输入命令 cache: 后跟相关 URL,您可以访问该网站的较早版本(希望仍在运行)。 但是,您不会真正浏览该页面,您只会在 Google 服务器上的副本中导航。
如果您想访问的网站长时间无法访问,您当然可以联系站长。 他们甚至可能不知道访问者无法访问他们的网站。