理解 521 错误:Web 服务器已关闭
在互联网上访问资源通常需要向存储这些资源的服务器发送请求。 这个过程可以通过计算机、智能手机或任何其他联网设备完成。
在这一过程中,发出资源请求的设备被称为客户端,而向服务器请求资源的行为则称为 HTTP 请求。
HTTP 是一种管理互联网信息交换的协议或规则。当客户端向服务器发出资源请求时,这个请求被称为 HTTP 请求。
服务器在收到客户端的资源请求后,除了在请求成功时返回资源外,还会返回一个三位数的状态代码,用来指示请求的处理情况。
请求的结果可能是成功的、需要重定向的,或者是服务器上找不到所请求资源。 这些关于请求状态的信息通过状态代码进行传达。
状态代码被分为不同的类别,由代码中的首位数字标识。 以 1 开头的状态代码是信息代码,表明请求已被接收且正在处理中;以 2 开头的表示客户端的请求已被成功接收、理解和接受。
以 3 开头的状态码表示重定向,以 4 开头的表示客户端错误,而以 5 开头的则表示服务器错误。
除了 HTTP 标准定义的官方状态码外,还存在一些非官方的状态码,它们在官方状态码的基础上进行了扩展。 其中一种非官方状态码是 521,表示 Web 服务器已关闭。 这是 Cloudflare 反向代理服务使用的一种状态码。
反向代理服务器是一种位于 Web 服务器前的中间服务器,它拦截客户端的请求,并将其传递给 Web 服务器。 这种架构确保客户端不直接与 Web 服务器通信,而是通过反向代理获取所需的资源。
反向代理服务器可以保护 Web 服务器的身份,提高其可靠性、安全性和性能,还有助于高流量网站的负载均衡。
Cloudflare 的反向代理服务的一个例子是其内容分发网络(CDN)。CDN 由地理位置分散的服务器组成,这些服务器缓存离用户物理位置较近的 Web 内容。 这可以加快互联网内容的加载速度。
错误 521 Web 服务器已关闭,发生在客户端尝试从拒绝与 Cloudflare 代理建立连接的源服务器获取资源时。为了向客户端提供所请求的内容,Cloudflare 的代理服务需要在端口 80 或 443 上与拥有资源的源服务器建立连接。
有时,源服务器会直接拒绝与 Cloudflare 代理的连接,并返回连接被拒绝的错误。 当 Cloudflare 遇到来自源服务器的连接被拒绝错误时,就会导致 521 错误,并将其显示给发出请求的客户端。
导致 521 错误的原因
虽然 521 错误通常表明您的源 Web 服务器已关闭,但并不总是因为 Web 服务器确实已关闭。 还有其他一些原因可能导致此错误。 以下是一些潜在原因:
#1. 您的源 Web 服务器已关闭
如果您要从中请求资源的源 Web 服务器处于离线状态,Cloudflare 反向代理服务将无法与其建立连接。 这将导致 521 错误。当源服务器上的某些 Web 服务器进程未正常运行时,也会发生类似错误,导致 Cloudflare 无法与其连接。
#2. 您的源 Web 服务器正在阻止来自 Cloudflare 的请求
Cloudflare 的反向代理服务接收来自客户端的请求,并将其传递给拥有请求资源的服务器。 因此,源服务器的安全配置或防火墙可能会将 Cloudflare 的 IP 地址视为大量资源请求的来源,并将其标记为攻击。
这会导致 Cloudflare 的 IP 地址被阻止,Cloudflare 从而无法连接到原始 Web 服务器。 即使原始服务器可能正常工作,也会导致 521 错误。
#3. 源站配置错误
Cloudflare 的内容分发网络(CDN)是一种反向代理服务。 要使用 CDN,服务器需要进行正确的配置。 如果在设置 CDN 时配置不正确,则客户端向源服务器发出请求时会收到 521 错误。 如果防火墙被配置为丢弃数据包而不是拒绝连接,也会导致 521 错误。
#4. Cloudflare 的 SSL 证书问题
Cloudflare 支持使用安全套接字层(SSL)证书来加密服务器和客户端之间的流量。 SSL 证书用于验证网站的身份并建立加密连接。
如果网站的 SSL 证书或 Cloudflare 使用的加密模式有问题,源服务器将拒绝连接请求,从而导致 521 错误。
如何修复 521 错误
有多种方法可以解决 521 错误。 其中包括:
#1. 检查源站是否在线
当源服务器离线或关闭时,可能会出现 521 错误。 要检查源站是否已启动并运行,请打开终端窗口并对要检查的站点执行 ping 命令。
ping techblik.com
如果服务器正在运行,您将收到来自服务器的响应,如下所示:
在这种情况下,techblik.com 的原始服务器已启动并正在运行。 然而,在撰写本文时,第二台测试服务器已关闭。 从该服务器收到零数据包,且数据包丢失率为 100%。 打开该网站会显示一个 502 错误页面:
按下 CTRL + C 退出 ping 命令的输出。
检查服务器是否在线的另一种方法是访问网站 isitdownrightnow 并输入您要检查的网站。 该网站会告诉您服务器是否正在运行,如下所示:
如果您不熟悉将 Cloudflare 的 CDN 与您的服务器一起使用,请检查确保您的原始服务器已正确配置为监听端口 443,并允许 Cloudflare 的 IP 地址访问端口 443。 此外,请确保您的防火墙配置正确,以避免丢弃数据包,这会导致 521 错误。
#2. 将 Cloudflare 的 IP 地址加入白名单
导致 521 错误的另一个原因是,Cloudflare 的 IP 地址可能被标记为可疑,并因发出大量请求而被阻止。 为了解决这个问题,请与您的托管服务提供商联系,确保他们没有阻止或限制 Cloudflare IP 地址发出的请求。 可以提出请求。
如果您运行自己的专用服务器,请确保您的防火墙没有阻止 Cloudflare 的 IP 地址。 此外,禁用并卸载 Apache 自定义模块,例如 mod_antiloris 和 mod_reqtimeout,这些模块会阻止连接超过 22 次的 IP 地址。
#3. 检查正在使用的 SSL 证书或加密模式
根据 SSL 加密模式(设置为灵活、完整或严格)的不同,Cloudflare 将以不同的方式处理源服务器提供的 SSL 证书。 这些 Cloudflare 加密模式用于在 Cloudflare 的反向代理服务和源服务器之间建立连接。
完整或严格模式是最流行的选择或加密模式,因为它们需要 SSL 证书。 使用这些模式时,Cloudflare 需要来自源服务器的有效 SSL 证书。 当您网站的 SSL 证书出现问题时,特别是当使用严格的加密模式时,会发生 521 错误。
要解决此问题,请在您的原始服务器上安装 Cloudflare 原始证书,或者使用来自受信任的证书颁发机构的 SSL 证书。 将加密模式从严格更改为完全加密也有助于解决由源服务器的 SSL 证书问题引起的 521 错误。
结论
使用内容分发网络(例如 Cloudflare 的 CDN)已成为在互联网上提供内容的一种常见方式。 使用 CDN 可以使 Web 应用程序加载速度更快、性能更高,并提高可靠性和安全性。
使用 Cloudflare 时,您可能会遇到 521 错误,这通常表示源服务器存在问题。 在这种情况下,请参考上面提供的解决方案。 如果这些方案都不起作用,请考虑联系 Cloudflare 的客户服务以获得进一步的帮助。