NGINX.COM
Web Server Load Balancing with NGINX Plus

反向代理服务器和负载均衡器是“客户端-服务器”这种运算架构中的组件。两者均充当客户端与服务器之间通信的中介,可执行一系列功能以提高效率。它们可以作为专用设备来部署,但在现代 Web 架构中,它们正越来越多地成为在商用硬件上运行的软件应用。

它们的基本定义很简单:

  • 反向代理接受来自客户端的请求,将其转发到可完成该请求的服务器,并将服务器的响应返回给客户端。
  • 负载均衡器将传入的客户端请求分发到一组服务器,每次再将收到请求的服务器的响应返回给相应的客户端。

两者听起来非常相似,对吧?这两种类型的应用都位于客户端和服务器之间,接受来自前者的请求并交付来自后者的响应。难怪人们会混淆了反向代理与负载均衡器。为了帮助大家将两者区分开来,下面我们将探讨一下它们通常何时以及为何部署在网站上。

 

负载均衡

当一个网站需要多台服务器时,通常会部署负载均衡器,因为请求量太大,单台服务器无法进行高效处理。部署多台服务器还有助于消除单点故障,从而提高网站的可靠性。最常见的情况是,所有服务器都托管相同的内容,负载均衡器的主要任务是分配工作负载,同时充分利用每台服务器的容量、防止任何服务器过载,并尽可能快速地响应客户端。

负载均衡器还能够减少客户端遇到的错误响应数量,从而提升用户体验。为此,它会检测服务器何时出现故障,并将请求从这些服务器转至组中的其他服务器。在最简单的实现中,负载均衡器可通过拦截对常规请求的错误响应来检测服务器健康状况。应用健康检查是一种更灵活、更复杂的方法——负载均衡器会发送多个单独的健康检查请求,然后需要通过接收到指定类型的响应来判断服务器的健康状态。

一些负载均衡器具有的另一个实用功能是会话保持,这意味着将特定客户端发出的所有请求都发送到同一服务器。尽管 HTTP 在理论上是无状态的,但许多应用必须存储状态信息才能提供其核心功能 — 比如电子商务网站上的购物车。在负载均衡的环境中,如果负载均衡器将用户会话中的请求分发到不同的服务器,而非将其全部定向到响应初始请求的服务器,那么此类应用就会变得表现不佳甚至可能会发生故障。

 

反向代理

部署负载均衡器仅在您拥有多台服务器时才有意义,而即使只有一台 Web 服务器或应用服务器,部署反向代理通常也很有必要。您可将反向代理视为网站的“门面”。反向代理的地址就是网站的广告地址,它位于网站的网络边缘,用于接受来自 Web 浏览器和移动应用对网站托管内容的请求。它有两大优势:

  • 更高的安全性 — 在您的内部网络之外看不到有关后端服务器的任何信息,因此恶意客户端无法直接进行访问以利用任何漏洞。许多反向代理服务器具有的特性能够保护后端服务器免遭分布式拒绝服务 (DDoS) 攻击,例如拒绝来自特定客户端 IP 地址的流量(列入黑名单),或者限制从各个客户端接受的连接数。
  • 更高的可扩展性和灵活性 — 鉴于客户端只能看到反向代理的 IP 地址,因此您可以自由地更改后端基础架构的配置。这在负载均衡的环境中尤为有用,您可在其中根据流量的波动调整服务器的数量。

部署反向代理的另一个原因是实现 Web 加速 — 缩短生成响应并将其返回到客户端所需的时间。Web 加速技术包含以下特性:

  • 压缩 — 在将服务器响应返回到客户端之前对其进行压缩(例如,使用 gzip)可减少它们所需的带宽量,从而加快其网络传输速度。
  • SSL 卸载 — 对客户端和服务器之间传输的流量进行加密,从而在流量通过互联网等公共网络时保护其安全无虞。不过由于解密和加密的计算成本可能很高,反向代理可通过解密传入的请求并加密服务器响应来释放后端服务器上的资源。这样后端服务器就可以被用于其主要用途,即提供内容。
  • 缓存 — 在将后端服务器的响应返回给客户端之前,反向代理会在本地存储其副本。当该客户端(或任何其它客户端)发出同一请求时,反向代理可自行利用之前的缓存来提供响应,而非将该请求转发到后端服务器。这既缩短了对客户端的响应时间,也减少了后端服务器的负载。

 

NGINX Plus 如何助一臂之力?

作为出色的负载均衡解决方案,NGINX Plus 和 NGINX 在 Dropbox、Netflix 和 Zynga 等高流量网站中有着广泛的应用。全球超过 3.5 亿个网站都使用 NGINX Plus 和 NGINX 开源版快速、可靠、安全地交付内容。

NGINX Plus 可执行上述所有负载均衡和反向代理功能等,从而提高网站性能、可靠性、安全性及可扩展性。作为基于软件的负载均衡器,NGINX Plus 的成本比具有类似功能的基于硬件的解决方案低得多。NGINX Plus 中的全面负载均衡和反向代理功能可支持您轻松构建高度优化的应用交付网络。

如欲详细了解 NGINX Plus 如何实现上述特性,请查看以下资源:

观看以下视频,了解如何在 NGINX 日志中设置反向代理和获取请求头:

Tags

No More Tags to display