1. 程式人生 > >Nginx正反向代理

Nginx正反向代理

首先應該先明確正向代理和反向代理的配置方式是一樣的,不一樣的是兩者的作用和應用場景不同

一 概念

正向代理

客戶端在訪問伺服器中間加了一個代理伺服器,客戶端需要知道這個代理伺服器的的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;