访问 Web 服务器或应用程序时,服务器收到的每个 HTTP 请求都会以 HTTP 状态代码进行响应。HTTP 状态代码是三位数代码,分为五个不同的类别。状态代码的类别可以通过它的第一个数字快速识别:
本指南侧重于从系统管理员的角度识别和排除最常见的 HTTP错误 代码,即 4xx 和 5xx 状态代码。有许多情况可能导致 Web 服务器响应具有特定错误代码的请求——我们将介绍常见的潜在原因和解决方案。
客户端错误或从 400 到 499 的 HTTP 状态代码是用户客户端(即 Web 浏览器或其他 HTTP 客户端)发送 HTTP 请求的结果。尽管这些类型的错误与客户端相关,但了解用户遇到的错误代码对于确定潜在问题是否可以通过服务器配置修复通常很有用。
服务器错误,或从 500 到 599 的 HTTP 状态代码,当 Web 服务器知道发生了错误或无法处理请求时,它会返回。
access.log
和error.log
可扫描的相关信息现在您已经对 HTTP 状态代码有了一个高层次的了解,我们将看看常见的错误。
400 状态代码或错误请求 错误表示发送到服务器的 HTTP 请求的语法无效。
以下是可能发生 400 Bad Request 错误的几个示例:
curl
不正确)401 状态代码或Unauthorized 错误意味着尝试访问资源的用户尚未经过身份验证或未正确进行身份验证。这意味着用户必须提供凭据才能查看受保护的资源。
返回 401 Unauthorized 错误的示例场景是,如果用户尝试访问受 HTTP 身份验证保护的资源,如本 Nginx 教程中所示。在这种情况下,用户将收到 401 响应代码,直到他们向 .htpasswd
Web 服务器提供有效的用户名和密码(文件中存在的用户名和密码)。
403 状态码或Forbidden 错误意味着用户发出了有效的请求,但由于缺乏访问所请求资源的权限,服务器拒绝为该请求提供服务。如果您意外遇到 403 错误,此处解释了一些典型原因。
当运行 Web 服务器进程的用户没有足够的权限读取正在访问的文件时,通常会发生 403 错误。
举个排除403错误的例子,假设以下情况:
http://example.com/index.html
www-data
用户所有/usr/share/nginx/html/index.html
如果用户收到 403 Forbidden 错误,请确保 www-data
用户有足够的权限来读取文件。通常,这意味着文件的其他权限 应设置为read 。有几种方法可以确保这一点,但在这种情况下,以下命令将起作用:
sudo chmod o=r /usr/share/nginx/html/index.html
403 错误的另一个潜在原因(通常是有意为之)是使用 .htaccess
文件。例如,该 .htaccess
文件可用于拒绝对特定 IP 地址或范围的某些资源的访问。
如果用户意外收到 403 Forbidden 错误,请确保它不是由您的 .htaccess
设置引起的。
如果用户尝试访问没有默认索引文件的目录,并且未启用目录列表,则 Web 服务器将返回 403 Forbidden 错误。例如,如果用户尝试访问 http://example.com/emptydir/
,而 emptydir
服务器上的目录中没有索引文件,则会返回 403 状态。
如果您希望启用目录列表,您可以在您的 Web 服务器配置中这样做。
404 状态代码或Not Found 错误意味着用户能够与服务器通信,但无法定位请求的文件或资源。
404 错误可能发生在多种情况下。如果用户意外收到 404 Not Found 错误,请在排除故障时询问以下问题:
500 状态代码或Internal Server Error 表示服务器因未知原因无法处理请求。有时,当更具体的 5xx 错误更合适时,会出现此代码。
此错误的最常见原因是服务器配置错误(例如格式错误的 .htaccess
文件)或缺少包(例如,在没有正确安装 PHP 的情况下尝试执行 PHP 文件)。
502 状态代码,或Bad Gateway 错误,意味着服务器是网关或代理服务器,并且它没有从真正满足请求的后端服务器接收有效响应。
如果有问题的服务器是反向代理服务器,例如负载均衡器,则需要检查以下几点:
503 状态代码或服务不可用 错误表示服务器过载或正在维护。此错误意味着该服务应该在某个时候可用。
如果服务器不在维护状态,这可能表明服务器没有足够的 CPU 或内存资源来处理所有传入请求,或者需要配置 Web 服务器以允许更多用户、线程或进程。
504 状态代码或网关超时 错误表示服务器是网关或代理服务器,并且在允许的时间段内未收到后端服务器的响应。
这通常发生在以下情况:
现在您已经熟悉了最常见的 HTTP 错误代码以及这些代码的常见解决方案,您应该有一个很好的基础来解决 Web 服务器或应用程序的问题。
如果您遇到本指南中未提及的任何错误代码,或者您知道所描述的其他可能的解决方案,请随时在评论中讨论它们!