反向代理服务器是一种代理服务器,它部署在客户端和后端/原始服务器之间,例如,http服务器(例如nginx,apache等)或用NodeJS,Python,Java,Ruby编写的应用程序服务器。,php和许多其他编程语言。
它是网关或中介服务器,负责接收客户端请求,将其传递到一个或多个后端服务器,然后从服务器获取响应并将其传递回客户端,从而使其看起来像是内容源于反向代理服务器本身。
通常,反向代理服务器是面向内部的代理,用作“前端”以控制和保护对专用网络上的后端服务器的访问:它通常部署在网络防火墙后面。
它帮助后端服务器实现匿名性以增强其安全性。在IT基础架构中,反向代理还可以充当应用程序防火墙,负载平衡器,TLS终结器,Web加速器(通过缓存静态和动态内容)等等。
在本文中,我们将回顾可在Linux系统上使用的8种顶级开源反向代理服务器。
1. HAProxy
HAProxy(HAProxy,代表高可用性代理服务器),这是一个免费的,开源的,非常快速,可靠的顶级负载平衡器和代理软件,用于基于TCP和http的应用程序,旨在实现高可用性。
HAProxy是http反向代理,TCP代理和规范化器,ssl / TLS终结器/发起程序/卸载程序,缓存代理,http压缩卸载程序,流量调节器,基于内容的交换机,FastCGI网关等。它还是针对DDOS和服务滥用的保护。
它由事件驱动的非阻塞引擎提供动力,该引擎将非常快的I / O层与基于优先级的多线程调度程序相结合,从而使其能够轻松处理成千上万的并发连接。值得注意的是,HAProxy使用PROXY协议将客户端的连接信息传递到后端或原始服务器,以便应用程序获取所有相关信息。
HAProxy的一些基本功能包括代理,ssl支持,监视服务器状态及其自身状态,高可用性,负载平衡,粘性(即使在发生各种事件时也将访问者保持在同一服务器上),内容切换,http重写和重定向,服务器保护,日志记录,统计信息等等。
2. nginx
nginx,一个免费的,开源的,高性能的,非常流行的http服务器和反向代理。它还充当IMAP / POP3代理服务器。nginx以其高性能,稳定性,丰富的功能集,简单灵活的配置以及低资源消耗(特别是较小的内存占用)而闻名。
就像HAProxy一样,nginx具有事件驱动的体系结构,因此它使用HAProxy的PROXY协议可以处理成千上万的并发连接。
nginx支持使用ngx_http_proxy_module 模块进行缓存的加速反向代理,该模块允许通过http以外的协议(例如FastCGI,uwsgi,SCGI和memcached)将请求传递到另一台服务器。
重要的是,它支持负载平衡和容错能力,这是大规模分布式计算系统的重要方面。该ngx_http_upstream_module模块允许定义后端服务器组分发来自客户端发出请求。这使您的应用程序更加健壮,可用,可靠,高度可扩展,并具有响应时间和吞吐量。此外,关于安全性,它支持ssl / TLS终止和许多其他安全功能。
3. Varnish http Cache
Varnish http Cache(或称Varnish Cache或简称Varnish)是一款免费、开源、高性能、非常流行的缓存反向代理软件,更被称为Web应用加速器,旨在利用服务器端缓存提高http性能。
它部署在客户端和http Web服务器或应用服务器之间,每次客户端向Web服务器请求信息或资源时,Varnish都会存储一份信息的副本,所以下次客户端请求相同的信息时,Varnish会在不向Web服务器发送请求的情况下提供服务,从而减少服务器的负载,进而加快Web内容的传输速度。
Varnish使用了一种灵活的配置语言,即Varnish配置语言(VLC),它使系统管理员能够配置如何处理传入的请求,应该提供什么内容,从哪里来,以及如何改变请求或响应,等等。
Varnish还具有可扩展性–它可以使用Varnish模块(VMODs)进行扩展,用户可以编写自己的自定义模块或使用社区提供的模块。
Varnish的主要限制是它缺乏对ssl/TLS的支持。启用httpS的唯一方法是在前面部署一个ssl/TLS终端器或卸载器,如HAProxy或nginx。
4. Tr?f?k
Tr?f?k(读作Traffic)是一个免费、开源、现代、快速的http反向代理和负载均衡器,用于部署微服务,支持多种负载均衡算法。它可以与各种提供商(或服务发现机制或协调工具)对接,如Kubernates、docker、Etcd、Rest API、Mesos/Marathon、Swarm和Zookeper。
它可爱的特点是它能够自动和动态地管理其配置,从而为你的服务发现正确的配置。它通过扫描你的基础设施来寻找相关信息,并发现哪个服务服务于来自外部世界的哪个请求。提供者会告诉Tr?f?k你的应用程序或微服务的位置。
Tr?f?k的其他功能是支持WebSockets、http/2和GRPC,以及热重载(持续更新其配置而无需重启),httpS使用Let’s Encrypt证书(支持通配符证书),并暴露了一个REST API。它还保存访问日志,并提供指标(Rest、Prometheus、Datadog、Statsd、InfluxDB)。
此外,Tr?f?k还提供了一个简单的基于html的Web用户界面,用于关注事件。它还支持断路器、重试请求、速率限制和基本认证。
apache Traffic Server以前是雅虎拥有的商业产品,后来交给了apache基金会,是一个免费的、开源的、快速的缓存前向和反向代理服务器。
Traffic Server还可以作为一个负载平衡器,并可以参与灵活的缓存层次结构。据了解,它已经处理了超过400 TB的流量在雅虎的一天。
它的特点是具有一套对内容请求的保持、过滤或匿名化功能,并可通过API进行扩展,允许用户创建自定义插件来修改http头,处理ESI请求,或设计新的缓存算法。
Squid是一个免费的、开源的、知名的代理服务器和Web缓存守护进程,支持http、httpS、FTP等多种协议。它的特点是采用反向代理(httpd-accelerator)模式,将传入的请求缓存为传出的数据。
它支持丰富的流量优化选项、访问控制、授权、日志设施等。
7. Pound
A Pound是另一个免费开源的轻量级反向代理和负载均衡器,也是Web服务器的前端。它也是一个ssl终结者(可以解密来自客户端的httpS请求,并将其作为纯http发送给后端服务器),一个http/httpS消毒器(可以验证请求的正确性,只接受格式良好的请求),以及一个故障转移服务器。
最后但并非不重要,apache http服务器(也称为httpD),这是全球最流行的网络服务器。它也可以被部署和配置为反向代理。