什么是反向代理,它是如何工作的?
已发表: 2022-08-09
反向代理是任何系统管理员工具包中的有用工具。 它们有很多用途,包括负载平衡、防止 DDOS 攻击
什么是反向代理?
常规代理,称为转发代理,是一个服务器,用户的连接通过该服务器进行路由。 在许多方面,它就像一个简单的 VPN,位于您的互联网连接之前。 VPN 是其中的一个常见示例,但它们也包括诸如学校防火墙之类的东西,它可能会阻止对某些内容的访问。
反向代理的工作方式略有不同。 它是系统管理员使用的后端工具。 与直接连接到提供内容的网站不同,像 NGINX 这样的反向代理可以位于中间。 当它收到来自用户的请求时,它将转发或“代理”该请求到最终服务器。 该服务器被称为“源服务器”,因为它将实际响应请求。
虽然用户可能会知道他们是否通过 VPN 或防火墙等正向代理进行路由,但反向代理是后端工具。 据用户所知,他们只是连接到一个网站。 反向代理背后的一切都是隐藏的,这也有很多好处。
不过,这种效果也会反过来发生。 源服务器与用户没有直接连接,只会看到来自反向代理 IP 的一堆请求。 这可能是个问题,但是像 NGINX 这样的大多数代理服务都会在请求中添加像X-Forwarded-For
这样的标头。 这些标头将通知源服务器客户端的实际 IP 地址。
反向代理有什么用途?
反向代理在概念上非常简单,但被证明是一个非常有用的工具,有许多意想不到的用例。
负载均衡
反向代理的主要好处之一是它们的轻量级。 由于它们只是转发请求,因此它们不必进行大量处理,尤其是在需要查询数据库的情况下。
这意味着瓶颈通常是源服务器,但是在它前面有一个反向代理,您可以轻松地拥有多个源服务器。 例如,代理可以将 50% 的请求发送到一台服务器,将 50% 的请求发送到另一台服务器,从而使网站容量翻倍。 像 HAProxy 这样的服务旨在很好地处理这个问题。
这是一个非常常见的用例,大多数云提供商(如 Amazon Web Services (AWS))都会将负载均衡作为一项服务提供,从而省去您自己设置的麻烦。 借助云自动化,您甚至可以根据流量自动扩展源服务器的数量,这一功能称为“自动扩展”。

像 AWS 的 Elastic Load Balancer 这样的负载均衡器可以设置为在您的源服务器上下运行时自动重新配置,这一切都可以通过后台的反向代理来实现。
相关:如何开始使用 AWS 的弹性负载均衡器
缓存
由于反向代理的响应速度通常比源服务器快得多,因此通常使用一种称为缓存的技术来加快公共路由上的请求。 缓存是指页面数据存储在反向代理上,并且每隔几秒/分钟从源服务器请求一次。 这大大减少了源服务器的压力。
例如,您现在正在阅读的这篇文章是由 WordPress 提供的,它需要与 SQL 数据库对话以获取文章内容和元数据。 考虑到页面并没有真正改变,为每次页面刷新都这样做是浪费的。 因此,这条路由可以被缓存,反向代理只会将最后一个响应发回给下一个用户,而不是再次打扰 WordPress。
缓存内容的专用反向代理网络称为内容交付网络或 CDN。 CloudFlare 或 Fastly 等 CDN 被大型网站用于加速全球交付。 世界各地缓存内容的服务器被称为“边缘节点”,拥有大量这些服务器可以让您的网站变得非常活泼。
网络保护和隐私
由于用户不知道反向代理背后的内容,他们将无法轻松地直接攻击您的源站服务器。 事实上,反向代理通常与私有子网中的原始服务器一起使用,这意味着它们根本没有到外部互联网的传入连接。
这使您的网络配置保持私密,虽然通过默默无闻的安全性永远不会万无一失,但总比让它受到攻击要好。
在规划网络时,这种固有的信任也很有用。 例如,与数据库对话的 API 服务器类似于反向代理。 数据库知道它可以信任私有子网中的 API 服务器,并且 API 服务器充当数据库的防火墙,只允许正确的连接通过它。
可配置的前端
像 NGINX 这样的反向代理的好处之一是它们的高度可配置性。 通常,它们在其他服务之前非常有用,只是为了配置用户访问这些服务的方式。
例如,NGINX 能够对某些路由的请求进行速率限制,这可以防止滥用者从单个 IP 向源服务器发出数千个请求。 这并不能阻止 DDOS 攻击,但拥有它是件好事。
NGINX 还能够通过可配置的“服务器”块转发来自多个域名的流量。 例如,它可以向example.com
发送请求到您的源服务器,但将api.example.com
发送到您的特殊 API 服务器,或将files.example.com
发送到您的文件存储,等等。 每个服务器都可以有自己的配置和规则。
NGINX 还能够在现有源服务器之上添加额外的功能,例如集中式 HTTPS 证书和标头配置。
有时,将 NGINX 与另一个本地服务放在同一台机器上是很有用的,只是为了提供来自该服务的内容。 例如,ASP.NET Web API 使用称为 Kestrel 的内部 Web 服务器,它擅长响应请求,但其他方面则不多。 在私有端口上运行 Kestrel 并使用 NGINX 作为可配置的反向代理是很常见的。
集中记录
这很简单,但是让您的大部分流量通过一项服务可以轻松检查日志。 NGINX 的访问日志包含很多关于你的流量的有用信息,虽然它不比谷歌分析等服务的功能更好,但它是很好的信息。
相关:如何为您的企业设置 Elasticsearch 分析和监控面板