在Nginx location通用匹配規(guī)則中配置proxy_pass轉發(fā)時恰梢,假設有如下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”后面的內容(此處為“/a.jsp”)拼接到proxy_pass的后面瞎访,然后轉發(fā)香嗓,也就是最后實際請求地址為:proxy_pass http://localhost:8080/test/a.jsp纱扭。
所以峡迷,如果location的匹配規(guī)則最后不加斜線'/'颇象,則proxy_pass的最后也不要加斜線伍伤,或者都加上斜線,不然就不能正確訪問實際地址遣钳,導致404 not found錯誤扰魂。
注:正則匹配不適用,關于location的匹配規(guī)則,可以參考其他資料劝评。
附:
作者在實際的項目布署中姐直,遇到過404的問題,這個轉發(fā)是去到spring cloud gateway的蒋畜,配置如下:
location /api-cc {
proxy_pass http://190.31.0.191:8001/ ;
}
這樣產生了404問題声畏,但是改成
location /api-cc/ {
proxy_pass http://190.31.0.191:8001/ ;
}
如此加一個/就成功了,上面那一段配置對于一般的轉發(fā)也是可以的姻成,但是對于轉發(fā)到spring cloud gateway就不行了插龄,所以作者猜想是不是spring cloud gateway不允許在路徑中出現(xiàn)兩個斜線,比如:
http://190.31.0.191:8001//cc/api01
經(jīng)過實際請求發(fā)現(xiàn)科展,果然猜想沒錯均牢,如此問題就得到完美解答了。