天天看點

Nginx正向反向代理差別一、正向代理和反向代理的差別二、nginx反向代理的使用

一、正向代理和反向代理的差別

正向代理代理用戶端,反向代理代理伺服器。

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的錯誤。

繼續閱讀