解決Nginx location中配置proxy_pass轉(zhuǎn)發(fā)時斜線‘/‘導(dǎo)致404問題
nginx location配置proxy_pass轉(zhuǎn)發(fā)時斜線‘/‘導(dǎo)致404
在Nginx location通用匹配規(guī)則中配置proxy_pass轉(zhuǎn)發(fā)時
假設(shè)有如下location配置:
location /test { proxy_pass http://localhost:8080/test; proxy_redirect off; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $host:$server_port; proxy_set_header X-Forwarded-Proto "https"; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Real-IP $remote_addr; }
如果我請求 http://localhost/test/a.jsp,則會將url根據(jù)匹配規(guī)則“/test”截取,然后將“/test”后面的內(nèi)容(此處為“/a.jsp”)拼接到proxy_pass的后面,然后轉(zhuǎn)發(fā),也就是最后實(shí)際請求地址為:proxy_pass http://localhost:8080/test/a.jsp。
所以,如果location的匹配規(guī)則最后不加斜線'/',則proxy_pass的最后也不要加斜線,或者都加上斜線,不然就不能正確訪問實(shí)際地址,導(dǎo)致404 not found錯誤。
注:正則匹配不適用,關(guān)于location的匹配規(guī)則,可以參考其他資料。
nginx反向代理中proxy_pass后面帶\和不帶\的坑
1. proxy_pass中帶\和不帶\的問題
(1)在nginx中配置proxy_pass時,當(dāng)在后面的url加上了/,相當(dāng)于是絕對根路徑,則nginx不會把location中匹配的路徑部分代理走;
(2)如果沒有/,則會把匹配的路徑部分也給代理走。
2. 舉例
下面四種情況分別用http://192.168.1.4/proxy/test.html 進(jìn)行訪問。
(1)
location /proxy/ { proxy_pass http://127.0.0.1:81/; }
由于port后面有/ ,則不會代理匹配的路徑,所以最終會被代理到: http://127.0.0.1:81/test.html
(2)
location /proxy/ { proxy_pass http://127.0.0.1:81; }
由于port后面沒有/ , 則會代理匹配的路徑,所以最終會被代理到: http://127.0.0.1:81/proxy/test.html
(3)
location /proxy/ { proxy_pass http://127.0.0.1:81/ftlynx/; }
由于port后面有/ ,則不會代理匹配的路徑,所以最終會被代理到: http://127.0.0.1:81/ftlynx/test.html
(4)
location /proxy/ { proxy_pass http://127.0.0.1:81/ftlynx; }
由于port后面有/ , 則不會代理匹配的路徑,所以最終會被代理到: http://127.0.0.1:81/ftlynxtest.html
心得:
- 從結(jié)果可以看出,應(yīng)該說分為兩種情況才正確。
- 即http://127.0.0.1:81(上面的第二種)和 http://127.0.0.1:81/…(上面的第1,3,4種)
總結(jié)
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Nginx安裝lua-nginx-module模塊的方法步驟
ngx_lua_module 是一個nginx http模塊,這篇文章主要介紹了Nginx安裝lua-nginx-module模塊的方法步驟,非常具有實(shí)用價值,需要的朋友可以參考下2018-12-12Nginx實(shí)現(xiàn)404頁面的幾種方法(三種)
一個網(wǎng)站項(xiàng)目,肯定是避免不了404頁面的,通常使用Nginx作為Web服務(wù)器時,有些相關(guān)配置方法,下面小編給大家?guī)砹薔ginx實(shí)現(xiàn)404頁面的幾種方法,感興趣的朋友一起看看吧2018-08-08Nginx服務(wù)器中為網(wǎng)站或目錄添加認(rèn)證密碼的配置詳解
這篇文章主要介紹了Nginx服務(wù)器中為網(wǎng)站或目錄添加認(rèn)證密碼的配置詳解,使用到了Apache的htpasswd工具,需要的朋友可以參考下2016-01-01Nginx修改默認(rèn)80端口(解決跟Tomcat的端口沖突)
本文主要介紹了Nginx修改默認(rèn)80端口(解決跟Tomcat的端口沖突),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07