什麼是反向代理,它是如何工作的?

已發表: 2022-08-09
跨世界地圖連接的服務器。
ArtemisDiana/Shutterstock.com

反向代理是任何系統管理員工具包中的有用工具。 它們有很多用途,包括負載平衡、防止 DDOS 攻擊

什麼是反向代理?

常規代理,稱為轉發代理,是一個服務器,用戶的連接通過該服務器進行路由。 在許多方面,它就像一個簡單的 VPN,位於您的互聯網連接之前。 VPN 是其中的一個常見示例,但它們也包括諸如學校防火牆之類的東西,它可能會阻止對某些內容的訪問。

反向代理的工作方式略有不同。 它是系統管理員使用的後端工具。 與直接連接到提供內容的網站不同,像 NGINX 這樣的反向代理可以位於中間。 當它收到來自用戶的請求時,它將轉發或“代理”該請求到最終服務器。 該服務器被稱為“源服務器”,因為它將實際響應請求。

雖然用戶可能會知道他們是否通過 VPN 或防火牆等正向代理進行路由,但反向代理是後端工具。 據用戶所知,他們只是連接到一個網站。 反向代理背後的一切都是隱藏的,這也有很多好處。

不過,這種效果也會反過來發生。 源服務器與用戶沒有直接連接,只會看到來自反向代理 IP 的一堆請求。 這可能是個問題,但是像 NGINX 這樣的大多數代理服務都會在請求中添加像X-Forwarded-For這樣的標頭。 這些標頭將通知源服務器客戶端的實際 IP 地址。

反向代理有什麼用途?

反向代理在概念上非常簡單,但被證明是一個非常有用的工具,有許多意想不到的用例。

負載均衡

反向代理的主要好處之一是它們的輕量級。 由於它們只是轉發請求,因此它們不必進行大量處理,尤其是在需要查詢數據庫的情況下。

如何設置 HAProxy 負載均衡器
相關如何設置 HAProxy 負載均衡器

這意味著瓶頸通常是源服務器,但是在它前面有一個反向代理,您可以輕鬆地擁有多個源服務器。 例如,代理可以將 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 分析和監控面板