Nginx - 代理後端經過域名訪問

目錄
- 前言
- Nginx 根據域名反向代理
- Nginx proxy_pass 關於 '/' 的做用前端

 

1. 前言

接到一個需求,經過nginx 代理互聯網上某一個頁面,剛開始的時候以爲很簡單的,直接 proxy_pass 過去就完事了,測試了下仍是想太多。具體記錄以下。nginx

 

2. Nginx 根據域名反向代理

web服務器一般有三種訪問方式:web

  1. 基於ip
  2. 基於域名
  3. 基於端口

而互聯網上暴露的網站多數都是經過 基於域名 的方式,若是直接經過解析後的IP訪問,可能就沒法訪問到網站信息。我這裏模擬了下這種方式,以下:瀏覽器

 

對應關係:bash

 

 

 

瀏覽器訪問域名:服務器

 

 

 

瀏覽器訪問ip地址:dom

 

 

 

如今問題來了,當你的 nginx 配置 proxy_pass 的時候,獲得的是 域名返回的結果 仍是 ip地址返回的結果呢?這兩種返回的結果徹底不一樣。測試

在另外一臺主機 [ 192.168.118.14 ] 上安裝 nginx 並配置好 網站

 

配置nginx 方向代理 spa

 

 

 

經過瀏覽器訪問 192.168.118.14

 

 

 查看日誌信息:

192.168.118.41 - - [23/Jul/2019:20:09:12 +0800] "GET / HTTP/1.1" 200 15 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36" "-" "upstream_addr":"112.2.3.66:80"

 

結合上面的反饋, 能夠獲得,當 nginx 反向代理域名,會根據啓動時候解析出來的ip,加載到內存中,後面不會改變能夠綁定hosts或者指定resolve服務器來固定ip

若是在使用 nginx 作反向代理的時候遇到以上相同的狀況,解決辦法是 設置一個 proxy_set_header

proxy_set_header Host "[domain]";

 

 

 

配置完成,nginx -s reload  瀏覽器訪問:

 

 

 如今就獲得想要的頁面了。

 

3. Nginx proxy_pass 關於 '/' 的做用

有這樣一個服務器訪問以下:

訪問 http://192.168.118.15 獲得

 

 

訪問 http://192.168.118.15/a/

 

 

在這臺主機前端須要添加一個反向代理。配置以下:

 

第一種配置:

 

 

當這樣配置的時候,訪問 http://192.168.118.14/a/ 結果以下:

 

 

總結:

proxy_pass http://192.168.118.14/a/  --> http://192.168.118.15/

 

第二種配置:

 

 

當這樣配置的時候,訪問 http://192.168.118.14/a/ 結果以下:

 

 

總結:

proxy_pass http://192.168.118.14/a  --> http://192.168.118.15/

 

綜上所述:

當 proxy_pass 不加 '/' 時, location uri 會追加到 proxy_pass http://domain/  後面;
當 proxy_pass 加 '/' 時,不會在 proxy_pass http://domain  後面追加任何uri

 

切記以上兩條規則。

相關文章
相關標籤/搜索