proxy_pass 注意事項


nginx代理配置完之后,nginx配置proxy_pass,需要注意轉發的路徑配置.

1. proxy_pass配置說明

不帶/

location /test/
{
                 proxy_pass http://t6:8300;
}

 

 帶/ 

location /test/
{
                 proxy_pass http://t6:8300/;
  }

上面兩種配置,區別只在於proxy_pass轉發的路徑后是否帶 “/”

如果是不帶/的情況,如果訪問url = http://server/test/test.jsp,則被nginx代理后,請求路徑會便問http://proxy_pass/test/test.jsp,將test/ 作為根路徑,請求test/路徑下的資源

如果是帶/的情況,如果訪問url = http://server/test/test.jsp,則被nginx代理后,請求路徑會變為 http://proxy_pass/test.jsp,直接訪問server的根資源

2. 典型實例

同一個域名下,根據根路徑的不同,訪問不同應用及資源
例如:A應用 http://server/a  ; B應用 http://server/b

A 應用和 B應用共同使用訪問域名 http://server;
配置nginx代理轉發時,如果采用情況2的配置方式,則會導致訪問http://server/a/test.jsp時,代理到http://proxy_pass/test.jsp,導致無法訪問到正確的資源,頁面中如果有對根資源的訪問,也都會以http://server 做為根路徑訪問資源,導致資源失效

針對此類情況,需要采用情況1,分別針對不用應用,設置不同的根資源路徑,並保證代理后的根路徑也依然有效

 

 

一般而言,通過www.b.com/a 代理到www.a.com   如果后面加/則www.b.com/a = www.a.com  否則是www.b.com/a = www.a.com/a,前者如果www.a.com下有靜態樣式文件  那么請求路徑是www.b.com/static/....  自然是沒有樣式文件的,所以這種情況要在www.a.com下建一個a文件夾,然后項目放在里面,通過www.b.com/a/a = www.a.com/a 才能樣式才能生成成功,這種情況下最好末尾不加/,那么www.b.com/a = www.a.com/a.

如果www.a.com本身又代理了一個/api 代理到一個接口工程,然后www.b.com/a 訪問頁面通過/api 會訪問一個www.b.com/a/api訪問接口,因為末尾沒有斜杠   所以代理后的地址為www.a.com/a/api   會顯示404  因為沒有設置這個路徑如何顯示,所以要在www.a.com 設置代理  location /a/api  也代理到接口   這樣www.b.com/a/api才能訪問接口成功.

 

一般代理用於幫助JS 或者接口來根據path來請求不同地址,不太適合聯系項目間的關系    畢竟可以用子域名來解決.


免責聲明!

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



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