Nginx 中 proxy_pass
配置**帶 /
和不帶 /
**,核心區(qū)別在于 路徑拼接規(guī)則 不同,以下通過(guò) 實(shí)例對(duì)比 詳細(xì)說(shuō)明:
一、基礎(chǔ)規(guī)則
proxy_pass | | |
---|
不帶 / (如 proxy_pass http://backend ) | 會(huì)把 location 匹配的路徑完整拼接到代理地址后 | |
帶 / (如 proxy_pass http://backend/ ) | 會(huì)裁剪掉 location 匹配的路徑前綴,再拼接剩余路徑 | 代理地址 + (請(qǐng)求路徑 - location 匹配前綴) |
二、實(shí)例驗(yàn)證(以 location /app
為例)
場(chǎng)景 1:proxy_pass
不帶 /
配置:
location /app {
proxy_pass http://127.0.0.1:8080;
}
請(qǐng)求:http://yourdomain/app/user/1
實(shí)際代理到:http://127.0.0.1:8080/app/user/1
(邏輯:proxy_pass
地址 + location
匹配的完整路徑 /app
+ 剩余路徑 /user/1
)
場(chǎng)景 2:proxy_pass
帶 /
配置:
location /app {
proxy_pass http://127.0.0.1:8080/;
}
請(qǐng)求:http://yourdomain/app/user/1
實(shí)際代理到:http://127.0.0.1:8080/user/1
(邏輯:proxy_pass
地址 /
+ 裁剪 location
前綴 /app
后的剩余路徑 /user/1
)
場(chǎng)景 3:更復(fù)雜的 location
(帶后綴 /
)
配置:
location /app/ { # location 匹配以 /app/ 結(jié)尾的路徑
proxy_pass http://127.0.0.1:8080/api; # 不帶 /
}
請(qǐng)求:http://yourdomain/app/user/1
實(shí)際代理到:http://127.0.0.1:8080/api/app/user/1
(邏輯:proxy_pass
地址 api
+ location
匹配的完整路徑 /app/
+ 剩余路徑 user/1
)
場(chǎng)景 4:location
和 proxy_pass
都帶 /
配置:
location /app/ {
proxy_pass http://127.0.0.1:8080/api/; # 帶 /
}
請(qǐng)求:http://yourdomain/app/user/1
實(shí)際代理到:http://127.0.0.1:8080/api/user/1
(邏輯:proxy_pass
地址 api/
+ 裁剪 location
前綴 /app/
后的剩余路徑 user/1
)
三、典型應(yīng)用場(chǎng)景
場(chǎng)景 A:后端服務(wù)需要完整路徑
若后端服務(wù)(如 Tomcat)的接口路徑是 /app/api
,需保留 location
路徑,用 不帶 /
的配置:
location /app {
proxy_pass http://backend; # 不帶 /,保留 /app 路徑
}
場(chǎng)景 B:后端服務(wù)是根路徑(如靜態(tài)資源服務(wù)器)
若后端服務(wù)直接部署在根路徑(如 http://backend/
就是靜態(tài)資源根),用 帶 /
的配置裁剪前綴:
location /static {
proxy_pass http://backend/; # 帶 /,裁剪 /static 前綴
}
四、總結(jié)對(duì)比表
| proxy_pass | | |
---|
| proxy_pass http://b | http://b | http://b/app/user |
| proxy_pass http://b/ | http://b/ + (請(qǐng)求路徑 - location ) | http://b/user |
| proxy_pass http://b/api | http://b/api | http://b/api/app/user |
| proxy_pass http://b/api/ | http://b/api/ + (請(qǐng)求路徑 - location ) | http://b/api/user |
核心口訣:
- 帶
/
:裁剪 location
匹配的路徑前綴,再拼接。 - 不帶
/
:把 location
匹配的路徑完整拼到代理地址后。
根據(jù)后端服務(wù)的路徑需求,選對(duì)應(yīng)寫法即可解決 路徑拼接異常 或 跳轉(zhuǎn)丟失路徑 問(wèn)題~
閱讀原文:原文鏈接
該文章在 2025/7/1 23:23:48 編輯過(guò)