一、正向代理和反向代理的差別
正向代理代理用戶端,反向代理代理伺服器。
1.1正向代理:用戶端 <一> 代理 一>服務端
正向代理伺服器位于用戶端和伺服器之間,為了從伺服器擷取資料,用戶端要向代理伺服器發送一個請求,并指定目标伺服器,代理伺服器将目标伺服器傳回的資料轉交給用戶端。這裡用戶端需要要進行一些正向代理的設定的。
舉例:翻牆
正向代理中被代理的是用戶端的請求
1.2 反向代理:用戶端 一>代理 <一> 服務端
反向代理,用戶端對代理是無感覺的,用戶端不需要任何配置就可以通路,用戶端将請求發送到反向代理伺服器,由反向代理伺服器去選擇目标伺服器擷取資料後,在傳回給用戶端,此時反向代理伺服器和目标伺服器對外就是一個伺服器,暴露的是代理伺服器位址,隐藏了真實伺服器IP位址。
二、nginx反向代理的使用
在nginx的配置檔案nginx.conf中建立一個虛拟主機的配置,
server {
listen 8080;
server_name localhost;
location /category/ {
proxy_pass http://localhost;
}
}
以上的配置中,
- listen 表示nginx要監聽的端口;
- server_name 就是通路nginx時在浏覽器中輸入的域名,可以直接填ip位址,要綁定多個可以用空格隔開;
- location 表示nginx監聽該端口時要比對的url,如果通路nginx的url中包含有/category/就執行代理
- proxy_pass 表示nginx要把用戶端的請求代理到的目标。
注意這裡proxy_pass的路徑寫法,如果像上邊這樣,路徑的結尾不帶/,表示的是相對路徑,那麼nginx在轉發請求時不會截取掉原始url中的/category/ ,如浏覽器通路http://localhost:8080/category/findAll,那麼nginx實際發出的請求位址是http://localhost/category/findAll。
如果proxy_pass的目标路徑配置時 末尾帶上了/ ,表示的是絕對路徑,那麼nginx在轉發請求時就會截取掉原始url中的/category/ ,如浏覽器通路http://localhost:8080/category/findAll,那麼nginx實際發出的請求位址是http://localhost/findAll。
在配置時要根據自己的需要決定是否需要帶 /,不然實際使用時nginx會一直報404的錯誤。