- OpenResty完全開發指南:構建百萬級別并發的Web應用
- 羅劍鋒
- 829字
- 2019-07-25 11:55:07
2.7 反向代理
反向代理(Reverse Proxy)是現今網絡中一種非常重要的技術,它位于客戶端和真正的服務器(即所謂的后端)之間,接受客戶端的請求并轉發給后端,然后把后端的處理結果返回給客戶端。從客戶端的角度來看,訪問反向代理和真正的后端服務器兩者沒有任何區別。
反向代理的網絡結構如圖2-2所示:

圖2-2 反向代理的網絡結構
由于反向代理在客戶端和服務器之間加入了中間層,可以執行復雜的邏輯,所以它有很多的用途,例如:
■ 負載均衡 :最常用的功能,均衡多個后端服務器的訪問請求,實現服務集群化; ■ 安全防護 :使用WAF等工具防御網絡入侵,保護后端服務器; ■ 內容緩存 :緩存上下行數據,減輕后端服務器的壓力; ■ 數據加密 :加密驗證外部通信過程,而內部服務器之間沒有加密成本。
Nginx提供了優秀的反向代理功能,不僅支持HTTP反向代理,也支持TCP/UDP反向代理,非常適合用在網絡的核心位置擔當“中流砥柱”的重任。
2.7.1 上游集群
upstream塊定義了在反向代理時需要訪問的后端服務器集群和負載均衡策略(在Nginx里術語“upstream”代替了“backend”),可以在http{}或stream{}里配置。
upstream塊的基本形式是:
upstream backend { #upstream需要有一個名字 least_conn; #負載均衡策略 server 127.0.0.1:80; #一臺上游服務器 server ... weight=3; #可以指定多臺上游服務器 server ... backup; #備份用的上游服務器 keepalive 32; #使用連接池,長連接復用 }
upstream塊的配置比較簡單,主要使用server指令列出上游的服務器域名或IP地址,還可以用weight/max_fails/down/backup等附加參數來進一步描述這些服務器的狀態。least_conn指令確定了集群里服務器的負載均衡策略,類似的還有hash、ip_hash等。如果不給出明確的策略,Nginx就使用簡單的加權輪詢(round robin)。
2.7.2 代理轉發
在使用upstream配置了上游集群后,我們需要在location(http)或server stream)里用“proxy_pass”等指令把客戶端的請求轉發到后端,由Nginx根據負載均衡算法選擇一臺恰當的服務器提供服務,例如:
location /passto { #一個轉發的location proxy_set_header Host $host; #使用變量轉發原始請求的host頭部 proxy_pass http://backend; #轉發到upstream塊定義的服務器集群 }
Nginx代理轉發相關的指令比較多,用來應對各種復雜的場景,proxy_pass只是其中最基本的一個(轉發HTTP/HTTPS服務),其他的還有fastcgi_pass、memcached_pass等,篇幅所限這里就不詳細解說了,讀者可參考Nginx文檔。
- Three.js開發指南:基于WebGL和HTML5在網頁上渲染3D圖形和動畫(原書第3版)
- Visual C++實例精通
- Mastering Python Scripting for System Administrators
- INSTANT CakePHP Starter
- Python王者歸來
- Python機器學習實戰
- Linux操作系統基礎案例教程
- Extending Unity with Editor Scripting
- Struts 2.x權威指南
- Arduino電子設計實戰指南:零基礎篇
- 威脅建模:設計和交付更安全的軟件
- Ionic Framework By Example
- C語言解惑:指針、數組、函數和多文件編程
- Getting Started with SQL Server 2014 Administration
- Java編程動手學