反向代理服務(wù)器是一種代理服務(wù)器,它部署在客戶端和后端/原始服務(wù)器之間,例如,http服務(wù)器(例如nginx,apache等)或用NodeJS,Python,Java,Ruby編寫的應(yīng)用程序服務(wù)器。,php和許多其他編程語言。
它是網(wǎng)關(guān)或中介服務(wù)器,負責(zé)接收客戶端請求,將其傳遞到一個或多個后端服務(wù)器,然后從服務(wù)器獲取響應(yīng)并將其傳遞回客戶端,從而使其看起來像是內(nèi)容源于反向代理服務(wù)器本身。
通常,反向代理服務(wù)器是面向內(nèi)部的代理,用作“前端”以控制和保護對專用網(wǎng)絡(luò)上的后端服務(wù)器的訪問:它通常部署在網(wǎng)絡(luò)防火墻后面。
它幫助后端服務(wù)器實現(xiàn)匿名性以增強其安全性。在IT基礎(chǔ)架構(gòu)中,反向代理還可以充當(dāng)應(yīng)用程序防火墻,負載平衡器,TLS終結(jié)器,Web加速器(通過緩存靜態(tài)和動態(tài)內(nèi)容)等等。
在本文中,我們將回顧可在Linux系統(tǒng)上使用的8種頂級開源反向代理服務(wù)器。
1. HAProxy
HAProxy(HAProxy,代表高可用性代理服務(wù)器),這是一個免費的,開源的,非常快速,可靠的頂級負載平衡器和代理軟件,用于基于TCP和http的應(yīng)用程序,旨在實現(xiàn)高可用性。
HAProxy是http反向代理,TCP代理和規(guī)范化器,ssl / TLS終結(jié)器/發(fā)起程序/卸載程序,緩存代理,http壓縮卸載程序,流量調(diào)節(jié)器,基于內(nèi)容的交換機,F(xiàn)astCGI網(wǎng)關(guān)等。它還是針對DDOS和服務(wù)濫用的保護。
它由事件驅(qū)動的非阻塞引擎提供動力,該引擎將非常快的I / O層與基于優(yōu)先級的多線程調(diào)度程序相結(jié)合,從而使其能夠輕松處理成千上萬的并發(fā)連接。值得注意的是,HAProxy使用PROXY協(xié)議將客戶端的連接信息傳遞到后端或原始服務(wù)器,以便應(yīng)用程序獲取所有相關(guān)信息。
HAProxy的一些基本功能包括代理,ssl支持,監(jiān)視服務(wù)器狀態(tài)及其自身狀態(tài),高可用性,負載平衡,粘性(即使在發(fā)生各種事件時也將訪問者保持在同一服務(wù)器上),內(nèi)容切換,http重寫和重定向,服務(wù)器保護,日志記錄,統(tǒng)計信息等等。
2. nginx
nginx,一個免費的,開源的,高性能的,非常流行的http服務(wù)器和反向代理。它還充當(dāng)IMAP / POP3代理服務(wù)器。nginx以其高性能,穩(wěn)定性,豐富的功能集,簡單靈活的配置以及低資源消耗(特別是較小的內(nèi)存占用)而聞名。
就像HAProxy一樣,nginx具有事件驅(qū)動的體系結(jié)構(gòu),因此它使用HAProxy的PROXY協(xié)議可以處理成千上萬的并發(fā)連接。
nginx支持使用ngx_http_proxy_module 模塊進行緩存的加速反向代理,該模塊允許通過http以外的協(xié)議(例如FastCGI,uwsgi,SCGI和memcached)將請求傳遞到另一臺服務(wù)器。
重要的是,它支持負載平衡和容錯能力,這是大規(guī)模分布式計算系統(tǒng)的重要方面。該ngx_http_upstream_module模塊允許定義后端服務(wù)器組分發(fā)來自客戶端發(fā)出請求。這使您的應(yīng)用程序更加健壯,可用,可靠,高度可擴展,并具有響應(yīng)時間和吞吐量。此外,關(guān)于安全性,它支持ssl / TLS終止和許多其他安全功能。
3. Varnish http Cache
Varnish http Cache(或稱Varnish Cache或簡稱Varnish)是一款免費、開源、高性能、非常流行的緩存反向代理軟件,更被稱為Web應(yīng)用加速器,旨在利用服務(wù)器端緩存提高http性能。
它部署在客戶端和http Web服務(wù)器或應(yīng)用服務(wù)器之間,每次客戶端向Web服務(wù)器請求信息或資源時,Varnish都會存儲一份信息的副本,所以下次客戶端請求相同的信息時,Varnish會在不向Web服務(wù)器發(fā)送請求的情況下提供服務(wù),從而減少服務(wù)器的負載,進而加快Web內(nèi)容的傳輸速度。
Varnish使用了一種靈活的配置語言,即Varnish配置語言(VLC),它使系統(tǒng)管理員能夠配置如何處理傳入的請求,應(yīng)該提供什么內(nèi)容,從哪里來,以及如何改變請求或響應(yīng),等等。
Varnish還具有可擴展性–它可以使用Varnish模塊(VMODs)進行擴展,用戶可以編寫自己的自定義模塊或使用社區(qū)提供的模塊。
Varnish的主要限制是它缺乏對ssl/TLS的支持。啟用httpS的唯一方法是在前面部署一個ssl/TLS終端器或卸載器,如HAProxy或nginx。
4. Tr?f?k
Tr?f?k(讀作Traffic)是一個免費、開源、現(xiàn)代、快速的http反向代理和負載均衡器,用于部署微服務(wù),支持多種負載均衡算法。它可以與各種提供商(或服務(wù)發(fā)現(xiàn)機制或協(xié)調(diào)工具)對接,如Kubernates、docker、Etcd、Rest API、Mesos/Marathon、Swarm和Zookeper。
它可愛的特點是它能夠自動和動態(tài)地管理其配置,從而為你的服務(wù)發(fā)現(xiàn)正確的配置。它通過掃描你的基礎(chǔ)設(shè)施來尋找相關(guān)信息,并發(fā)現(xiàn)哪個服務(wù)服務(wù)于來自外部世界的哪個請求。提供者會告訴Tr?f?k你的應(yīng)用程序或微服務(wù)的位置。
Tr?f?k的其他功能是支持WebSockets、http/2和GRPC,以及熱重載(持續(xù)更新其配置而無需重啟),httpS使用Let’s Encrypt證書(支持通配符證書),并暴露了一個REST API。它還保存訪問日志,并提供指標(Rest、Prometheus、Datadog、Statsd、InfluxDB)。
此外,Tr?f?k還提供了一個簡單的基于html的Web用戶界面,用于關(guān)注事件。它還支持斷路器、重試請求、速率限制和基本認證。
apache Traffic Server以前是雅虎擁有的商業(yè)產(chǎn)品,后來交給了apache基金會,是一個免費的、開源的、快速的緩存前向和反向代理服務(wù)器。
Traffic Server還可以作為一個負載平衡器,并可以參與靈活的緩存層次結(jié)構(gòu)。據(jù)了解,它已經(jīng)處理了超過400 TB的流量在雅虎的一天。
它的特點是具有一套對內(nèi)容請求的保持、過濾或匿名化功能,并可通過API進行擴展,允許用戶創(chuàng)建自定義插件來修改http頭,處理ESI請求,或設(shè)計新的緩存算法。
Squid是一個免費的、開源的、知名的代理服務(wù)器和Web緩存守護進程,支持http、httpS、FTP等多種協(xié)議。它的特點是采用反向代理(httpd-accelerator)模式,將傳入的請求緩存為傳出的數(shù)據(jù)。
它支持豐富的流量優(yōu)化選項、訪問控制、授權(quán)、日志設(shè)施等。
7. Pound
A Pound是另一個免費開源的輕量級反向代理和負載均衡器,也是Web服務(wù)器的前端。它也是一個ssl終結(jié)者(可以解密來自客戶端的httpS請求,并將其作為純http發(fā)送給后端服務(wù)器),一個http/httpS消毒器(可以驗證請求的正確性,只接受格式良好的請求),以及一個故障轉(zhuǎn)移服務(wù)器。
最后但并非不重要,apache http服務(wù)器(也稱為httpD),這是全球最流行的網(wǎng)絡(luò)服務(wù)器。它也可以被部署和配置為反向代理。