介绍
当您访问 Web 服务器或应用程序时,每个由服务器接收的 HTTP 请求都会用 HTTP 状态代码响应。
- 1xx:信息
- 2xx:成功
- 3xx:重定向
- 4xx:客户端错误
- 5xx:服务器错误
本指南专注于从系统管理员的角度识别和解决最常见的HTTP 错误代码,即4xx和5xx状态代码。
客户端和服务器错误概述
客户端错误,或HTTP状态代码从400到499是由用户客户端(即网页浏览器或其他HTTP客户端)发送的HTTP请求的结果。
服务器错误,或HTTP状态代码从500到599,当Web服务器知道错误发生或无法处理请求时返回。
总体问题解决技巧
- 使用网页浏览器来测试网页服务器时,在进行服务器更改后,请刷新浏览器
- 检查服务器日志以获取有关服务器如何处理请求的更多细节。例如,Apache 或 Nginx 等网页服务器会生成两个名为
access.log
和error.log
的文件,可以扫描相关信息 - 请记住,HTTP状态代码定义是服务请求的应用程序实施的标准的一部分。
现在你对 HTTP 状态代码有很高的了解,我们将看看常见的错误。
第400章 错误的要求
400 状态代码或 Bad Request 错误意味着发送到服务器的 HTTP 请求具有无效的语法。
以下是可能发生 400 Bad Request 错误的几个例子:
清除浏览器的缓存和cookie可能会解决这个问题
- 由于错误的浏览器
- 由于人为错误而错误的请求,当手动形成HTTP请求(例如使用‘curl’错误)
第401章 未经批准
401 状态代码或 Unauthorized 错误意味着试图访问资源的用户未被验证或未被正确验证,这意味着用户必须提供凭证才能查看受保护的资源。
一个 401 未经授权的错误返回的例子是,如果用户试图访问受 HTTP 身份验证保护的资源,如在 本 Nginx 教程中。
第403章 被禁止
403 状态代码,或 Forbidden 错误,意味着用户提出了有效的请求,但服务器拒绝服务,因为缺乏访问所请求的资源的权限。
档案许可
403 错误通常发生在运行 Web 服务器流程的用户没有足够的权限来读取正在访问的文件时。
若要举一个 403 错误的例子,假设以下情况:
- 用户正在尝试访问网页服务器的索引文件,从http://example.com/index.html`
- 网页服务器工人流程由网页服务器的用户拥有
- 在服务器上,文件索引位于
/usr/share/nginx/html/index.html
如果用户收到 403 Forbidden 错误,请确保www-data
用户有足够的读取权限,这通常意味着该文件的 other permissions 应该设置为 read。
1sudo chmod o=r /usr/share/nginx/html/index.html
黑客
403 错误的另一个潜在原因,通常是故意的,是使用.htaccess 文件..htaccess 文件可以用来拒绝某些资源访问特定 IP 地址或范围,例如。
如果用户意外收到 403 禁止错误,请确保它不是由您的 .htaccess
设置引起的。
索引文件不存在
如果用户试图访问没有默认索引文件的目录,并且目录列表未启用,网页服务器将返回一个 403 禁止错误,例如,如果用户试图访问 http://example.com/emptydir/
,并且在服务器上的 emptydir
目录中没有索引文件,则会返回一个 403 状态。
如果您希望启用目录列表,则可以在 Web 服务器配置中这样做。
第404章 找不到
404状态代码或 Not Found 错误意味着用户可以与服务器进行通信,但无法找到所请求的文件或资源。
404 错误可能发生在各种情况下,如果用户意外收到 404 未找到错误,以下是解决问题时要问的几个问题:
- 引导用户到您的服务器资源的链接是否有打字错误?
- 用户输入错误的 URL?
- 该文件是否存在于服务器上的正确位置? 该资源是否在服务器上被移动或删除?
- 服务器配置是否有正确的文档根位置?
- 是否拥有Web服务器工人流程的用户有权通过所请求的文件所在的目录? (提示:目录需要阅读和执行访问权限)
- 访问的资源是否具有象征链接?如果是,请确保Web服务器配置遵循象征链接
500 内部服务器错误
500 状态代码,或 Internal Server Error,意味着服务器无法处理请求,原因不明。
此错误的最常见原因是服务器错误配置(例如,错误的.htaccess 文件)或缺少的包(例如,试图运行 PHP 文件而没有正确安装 PHP)。
《502 Bad Gateway》
502状态代码,或 Bad Gateway 错误,意味着服务器是一个网关或代理服务器,它没有收到实际满足请求的后端服务器的有效响应。
如果该服务器是反向代理服务器,例如负载平衡器,这里有几个要检查的事情:
- 后端服务器(向其转发 HTTP 请求)是健康的
- 反向代理配置正确,指定了正确的后端
- 后端服务器和反向代理服务器之间的网络连接是健康的. 如果服务器可以在其他端口进行通信,请确保防火墙允许它们之间的流量
- 如果您的 Web 应用程序配置为在插槽上收听,请确保插槽存在于正确的位置,并且具有正确的权限
第503章 没有服务
503状态代码,或 Service Unavailable 错误,意味着服务器过载或正在维护中。
如果服务器没有进行维护,这可能表明服务器没有足够的 CPU 或内存资源来处理所有传入请求,或者需要配置 Web 服务器以允许更多用户、线程或流程。
504 网关时间
504状态代码或 Gateway Timeout 错误意味着服务器是网关或代理服务器,并且在允许的时间内没有收到后端服务器的响应。
这种情况通常发生在以下情况下:
- 服务器之间的网络连接不好
- 满足请求的后端服务器太慢,由于性能差
- 网关或代理服务器的停机时间太短
结论
现在你已经熟悉了最常见的 HTTP 错误代码,以及这些错误代码的常见解决方案,你应该有一个很好的基础来解决你的 Web 服务器或应用程序的问题。
如果您遇到没有在本指南中提及的任何错误代码,或者您知道其他可能的解决方案,而那些被描述的,请在评论中讨论它们。