服务器问答

小白请教一下 nginx 的 location 和 proxy_pass 后面有无斜杠的区别
0
2021-05-19 17:25:50
idczone

我结合 tomcat 和 nginx 也做了一些测试,具体如下,

例如访问地址是 http://nginx/test/a.html

配置 1:

location /test {

...

  proxy_pass http://host:9020;

}

结果:

test/a.html
配置 2:

location /test {

...

  proxy_pass http://host:9020/;

}

结果:

ROOT/a.html
配置 3:

location /test/ {

...

  proxy_pass http://host:9020;

}

结果:

test/a.html
配置 4:

location /test/ {

...

  proxy_pass http://host:9020/;

}

结果:

ROOT/a.html
配置 5:

location /test/ {

...

  proxy_pass http://host:9020/testapp;

}

结果:

ROOT/testappa.html
配置 6:

location /test/ {

...

  proxy_pass http://host:9020/testapp/;

}

结果:

testapp/a.html


配置 7:

location /test {

...

  proxy_pass http://host:9020/testapp;

}

结果:

testapp/a.html
配置 8:

location /test {

...

  proxy_pass http://host:9020/testapp/;

}

结果:

testapp/a.html


疑问就是配置 7 和 8 结果是一样抗投诉服务器的?

为什么配置 7 的结果不依照类似配置 1 的结果?

不是 testapp/test/a.html 而是 testapp/a.html ?


那是因为。。你 7 的测试有问题。。标准的处理应该是
1. 目标地址中不带 uri ( proxy_pass http://tomcats )。此时新的目标 url 中,匹配的 uri 部分不做修改,原来是什么就是什么
2. 目标地址中带 uri ( proxy_pass http://tomcats/,/也是 uri ),此时新的目标 url 中,匹配的 uri 部分将会被修改为该参数中的 uri
参考这个 https://ops-coffee.cn/s/jyunn_otq2ntxch0mtcjug,多测试几遍看看

参考这个 github.com/xqin/nginx-proxypass-server-paths
之前也有过这个困惑, 然后无意间 看到有人做了个总结, 然后用 docker 实践了一下, 记录一下结果.



谢谢二位,看过两位回复和链接后总算弄清楚了

在 nginx 中配置 proxy_pass 时,当在后面的 url 加上了 /,相当于是绝对根路径,则 nginx 不会把 location 中匹配的路径部分代理走;如果没有 /,则会把匹配的路径部分也给代理走

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服