nginx代理配置完之后,nginx配置proxy_pass,需要注意轉發的路徑配置.
1. proxy_pass配置說明
不帶/
帶/
上面兩種配置,區別只在於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來請求不同地址,不太適合聯系項目間的關系 畢竟可以用子域名來解決.