nginx普通匹配末尾到底要不要加斜杠
先来看一段nginx配置
# 80端口下的一个普通匹配
location /test {
proxy_pass http://127.0.0.1:3000;
}
我们假设3000端口有一个接口getSomething
,就是说当我们请求http://127.0.0.1:3000/getSomething
理论上能正常返回数据
但就针对上面的配置而言我们请求http://127.0.0.1/test/getSomething
不出意外的话会是404
。
使用上面的配置 http://127.0.0.1/test/getSomething
经过转发实际请求的接口其实是http://127.0.0.1:3000/test/getSomething
:
原因就是没有使用斜杠的情况下匹配到的path
:/test/getSomething
会整个被拼在proxy_pass
的后面。也就是说如果想要80下的test
完全对应3000端口的话需要使用下面的配置
# 80端口下的一个普通匹配
location /test/ {
proxy_pass http://127.0.0.1:3000/; #这里尾部的/可有可无
}
还有一种情况,假设3000端口上还有一批服务,请求方式为http://127.0.0.1:3000/otherApis/***
现在我们在80上具体代理到这一批服务
location /otherApis {
proxy_pass http://127.0.0.1:3000/otherApis;
}
因为location的结尾和proxy_pass一致 这个时候/就可有可无了。实际测试不管是否尾部加/
都能正常请求到服务。