nginx - proxy_pass 末尾加不加斜杠的问题

如下实验,请求 http://192.168.10.100/api/employee/login 根据 error.log 日志输出的错误信息,判断 proxy_pass 之后的地址

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
1. 上边不加,下边加【这种写法有问题,会多一个斜杠】
location /api {
proxy_pass http://192.168.10.1:8080/;
}
参考error.log,最终请求地址 http://192.168.10.1:8080//employee/login

2. 上边不加,下边不加【保持原样】
location /api {
proxy_pass http://192.168.10.1:8080;
}
参考error.log,最终请求地址 http://192.168.10.1:8080/api/employee/login

3. 上边加,下边不加【同2】
location /api/ {
proxy_pass http://192.168.10.1:8080;
}
参考error.log,最终请求地址 http://192.168.10.1:8080/api/employee/login

4. 上边加,下边加
location /api/ {
proxy_pass http://192.168.10.1:8080/;
}
参考error.log,最终请求地址 http://192.168.10.1:8080/employee/login

个人推荐,保留 2 和 4 这两种写法,只需要记住:如果不想要匹配的部分,则上下都加 /,否则都不加!

另外一种,proxy_pass 后边的 url 包含路径,做如下实验,还是请求 http://192.168.10.100/api/employee/login

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
1. 上边不加,下边加【这种写法有问题,会多一个斜杠】
location /api {
proxy_pass http://192.168.10.1:8080/user/;
}
最终请求地址 http://192.168.10.1:8080/user//employee/login

2. 上边不加,下边不加【正常的去除前缀的写法】
location /api {
proxy_pass http://192.168.10.1:8080/user;
}
最终请求地址 http://192.168.10.1:8080/user/employee/login

3. 上边加,下边不加【这种写法有问题,会少一个斜杠】
location /api/ {
proxy_pass http://192.168.10.1:8080/user;
}
http://192.168.10.1:8080/useremployee/login

4. 上边加,下边加【正常的去除前缀的写法】
location /api/ {
proxy_pass http://192.168.10.1:8080/user/;
}
最终请求地址 http://192.168.10.1:8080/user/employee/login

总结:这种写法一定会去除前缀,总结就是:要么都没有 /,要么都要有 /,否则最终拼接的 url 有错误!

参考文献:Nginx中proxy_pass末尾带斜杠/和不带的区别_proxy_pass /-CSDN博客