Nginx - 代理后端通過域名訪問


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

 

1. 前言

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

 

2. Nginx 根據域名反向代理

web服務器通常有三種訪問方式:

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

而互聯網上暴露的網站多數都是通過 基於域名 的方式,如果直接通過解析后的IP訪問,可能就無法訪問到網站信息。我這里模擬了下這種方式,如下:

 

對應關系:

 

 

 

瀏覽器訪問域名:

 

 

 

瀏覽器訪問ip地址:

 

 

 

現在問題來了,當你的 nginx 配置 proxy_pass 的時候,得到的是 域名返回的結果 還是 ip地址返回的結果呢?這兩種返回的結果完全不同。

在另一台主機 [ 192.168.118.14 ] 上安裝 nginx 並配置好

 

配置nginx 方向代理

 

 

 

通過瀏覽器訪問 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

 

切記以上兩條規則。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM