Nginx正反向代理
阿新 • • 發佈:2018-11-09
首先應該先明確正向代理和反向代理的配置方式是一樣的,不一樣的是兩者的作用和應用場景不同
一 概念
正向代理:
客戶端在訪問伺服器中間加了一個代理伺服器,客戶端需要知道這個代理伺服器的的IP主動連線,再通過代理伺服器訪問目標伺服器。重點就是代理伺服器和目標伺服器並不是一體的,目標伺服器的本意沒想通過代理伺服器返回資源,是客戶端的意圖。
反向代理:
客戶端在訪問伺服器時,當前的伺服器並不是直接提供資源的伺服器,這個伺服器其實是代理伺服器,它將訪問目標伺服器,帶著結果給客戶端響應。重點就是代理伺服器(客戶端訪問的那個伺服器)和目標伺服器是一體,放客戶端並不知道自己訪問的是代理伺服器(透明),提供服務的一方就是想讓你先訪問代理伺服器,代理伺服器再去訪問目標伺服器。
舉個例子就是甲、乙兩家公司有合作,A、B屬於甲公司,C、D屬於乙公司,甲公司的A和乙公司需要進行溝通,第一種情況B的替A傳話給C,這就是正向代理;第二種情況A給乙公司發郵件想跟D確認情況,但是D只是個傳話的,決策權在C,D跟C說了情況再跟A反饋,這就是反向代理。
正向代理 | 反向代理 | |
---|---|---|
主要作用 | 遮蔽客戶端IP、集中式快取、解決客戶端不能直連服務端的問題。 | 遮蔽服務端內部實現、負載均衡、快取。 |
應用場景 | 爬蟲、翻牆、maven 的nexus 服務 | Nginx 、Apache負載均衡應用 |
二 配置
在location配置proxy_pass引數,表明指向的地址
正向代理演示:
訪問虛擬機器的/baidu.html,將其正向代理到百度主頁
#正向代理到baidu 服務
location = /baidu.html {
proxy_pass http://www.baidu.com;
}
反向代理演示:
訪問虛擬機器的/snowman/hello.html,反向代理到虛擬機器的tomcat的hello.html檔案
先在tomcat地webapp目錄下建個snowman/hello.html檔案
location = /snowman { proxy_pass http://127.0.0.1:8080; }
代理相關引數:
proxy_pass # 代理服務
proxy_redirect off; # 是否允許重定向
proxy_set_header Host $host; # 傳 header 引數至後端服務
proxy_set_header X-Forwarded-For $remote_addr; # 設定request header 即客戶端IP 地址
proxy_connect_timeout 90; # 連線代理服務超時時間
proxy_send_timeout 90; # 請求傳送最大時間
proxy_read_timeout 90; # 讀取最大時間
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;