介绍
当访问Web服务器或应用程序时,由服务器接收的每个HTTP请求都将使用HTTP状态代码进行响应。 HTTP状态代码是三位数代码,并分为五个不同的类。 状态代码的类可以通过其第一个数字快速识别:
- 1xx:信息
- 2xx:成功
- 3xx:重定向
- 4xx:客户端错误
- 5xx:服务器错误
本指南的重点是查明和排除故障的最常见的HTTP 错误代码,即4XX和5XX状态码,从系统管理员的角度。 有许多情况可能导致Web服务器响应具有特定错误代码的请求 - 我们将介绍常见的潜在原因和解决方案。
客户端和服务器错误概述
客户端错误或从400到499的HTTP状态代码是用户客户端(即Web浏览器或其他HTTP客户端)发送的HTTP请求的结果。 即使这些类型的错误是与客户相关的,通常知道用户遇到的错误代码以确定潜在的问题是否可以由服务器配置固定是有用的。
当Web服务器意识到发生错误或者无法处理请求时,将返回服务器错误或HTTP状态代码(从500到599)。
一般故障排除提示
- 当使用Web浏览器测试Web服务器时,在更改服务器后刷新浏览器
- 检查服务器日志以获取有关服务器如何处理请求的更多详细信息。 例如,网络服务器,如Apache或Nginx的生成两个文件名为
access.log
和error.log
,可以为相关的信息进行扫描 - 请记住,HTTP状态代码定义是由提供请求的应用程序实现的标准的一部分。 这意味着返回的实际状态代码取决于服务器软件如何处理特定错误 - 本指南通常应该指向正确的方向
现在,您对HTTP状态代码有了高级的了解,我们将查看常见的错误。
400错误请求
400状态码,或错误的请求错误,就意味着被发送到服务器的HTTP请求有无效的语法。
以下是几个可能发生400错误请求错误的示例:
- 与该网站相关联的用户Cookie已损坏。 清除浏览器的缓存和Cookie可以解决此问题
- 由于浏览器故障,导致请求格式错误
- 恶意代码的请求由于人为错误手动形成HTTP请求时(例如,使用
curl
错误)
401未经授权
在401状态码,或一个未经授权的错误,这意味着该用户试图访问该资源还未被验证或没有被正确认证。 这意味着用户必须提供凭证才能查看受保护的资源。
其中,将返回401错误未经授权的示例场景是,如果一个用户试图访问受HTTP认证保护的资源,如在本教程Nginx的 。 在这种情况下,直到它们提供一个有效的用户名和密码(一个存在于用户将收到401响应代码.htpasswd
文件)到Web服务器。
403禁止
403状态码,或Forbidden错误,意味着用户做了一个有效的请求,但服务器拒绝服务请求,因缺乏权限来访问所请求的资源。 如果您意外地遇到403错误,这里有一些典型的原因解释。
文件权限
当运行Web服务器进程的用户没有足够的权限读取正在访问的文件时,通常会发生403错误。
为了给出403错误的故障排除示例,假设以下情况:
- 用户试图访问Web服务器的索引文件,从
http://example.com/index.html
- Web服务器工作进程是由拥有
www-data
用户 - 在服务器上,索引文件位于
/usr/share/nginx/html/index.html
如果用户得到一个403 Forbidden错误,确保www-data
的用户有足够的权限读取文件。 通常,这意味着该文件的其他权限应设置为读出 。 有几种方法可以确保这一点,但以下命令将在这种情况下工作:
sudo chmod o=r /usr/share/nginx/html/index.html
.htaccess
403错误的另一个潜在原因,往往intentinally,是使用中.htaccess
文件。 该.htaccess
文件可以被用来拒绝特定的IP地址或范围的某些资源的访问,例如。
如果用户意外地得到一个403 Forbidden错误,确保它不被你引起.htaccess
设置。
索引文件不存在
如果用户尝试访问没有默认索引文件的目录,并且未启用目录列表,则Web服务器将返回403 Forbidden错误。 例如,如果用户正试图访问http://example.com/emptydir/
,并且在该没有索引文件emptydir
在服务器上的目录,403状态将返回。
如果要启用目录列表,您可以在Web服务器配置中进行。
错误(404
在404状态码,或一个未找到错误,这意味着用户能够与服务器进行通信,但它无法找到所需的文件或资源。
404错误可能发生在各种各样的情况下。 如果用户意外收到404未找到错误,以下是在疑难解答时要提出的一些问题:
- 将用户定向到您的服务器资源的链接是否有打字错误?
- 用户键入的网址有误吗?
- 文件是否存在于服务器上的正确位置? 资源是否已在服务器上移动或删除?
- 服务器配置是否具有正确的文档根位置?
- 拥有Web服务器工作进程的用户是否有权限遍历到请求的文件所在的目录? (提示:目录需要访问读取和执行权限)
- 访问的资源是否是符号链接? 如果是,请确保Web服务器配置为遵循符号链接
500内部服务器错误
500状态码,或内部服务器错误 ,这意味着服务器不能处理未知原因请求。 有时,当更特定的5xx错误更合适时,此代码将出现。
这此错误最常见的原因是服务器配置错误(例如,一个畸形.htaccess
文件)或缺失的软件包(如试图在没有安装正确PHP执行的PHP文件)。
502错误的网关
502状态码,或错误网关的错误,这意味着服务器的网关或代理服务器,它没有收到来自实际应该履行请求的后端服务器的有效响应。
如果有问题的服务器是逆向代理服务器,例如负载均衡器,则需要检查以下几项:
- 后端服务器(HTTP请求转发到的)是正常的
- 正确配置逆向代理,指定适当的后端
- 后端服务器和逆向代理服务器之间的网络连接是正常的。 如果服务器可以在其他端口上通信,请确保防火墙允许它们之间的流量
- 如果Web应用程序配置为侦听套接字,请确保套接字存在于正确的位置,并且具有适当的权限
503服务不可用
503状态码,或服务不可用的错误,表示服务器超载或正在维护。 这个错误意味着服务应该在某个时候可用。
如果服务器未处于维护状态,则这可以指示服务器没有足够的CPU或内存资源来处理所有传入的请求,或者Web服务器需要配置为允许更多的用户,线程或进程。
504网关超时
在504状态码,或网关超时错误,表示该服务器是网关或代理服务器,并且它不接收来自在允许的时间周期内的后端服务器的响应。
这通常发生在以下情况:
- 服务器之间的网络连接很差
- 由于性能不佳,履行请求的后端服务器太慢
- 网关或代理服务器的超时持续时间太短
结论
现在,您已经熟悉最常见的HTTP错误代码和这些代码的常见解决方案,您应该有一个良好的基础来解决您的Web服务器或应用程序的问题。
如果您遇到本指南中未提及的任何错误代码,或者您知道其他可能的解决方案,请随时在评论中进行讨论!