整理下location和proxy_pass匹配的规律并记录一下。
测试
通过nginx来测试不同情况下的结果,监听8080端口,反向代理到8081端口,这里只贴出location的配置。
location /api {
proxy_pass http://localhost:8081
}
# http://localhost:8080/api/user ==> http://localhost:8081/api/user
location /api/ {
proxy_pass http://localhost:8081
}
# http://localhost:8080/api/user ==> http://localhost:8081/api/user
location /api {
proxy_pass http://localhost:8081/
}
# http://localhost:8080/api/user ==> http://localhost:8081//user
location /api/ {
proxy_pass http://localhost:8081/
}
# http://localhost:8080/api/user ==> http://localhost:8081/user
location /api {
proxy_pass http://localhost:8081/test
}
# http://localhost:8080/api/user ==> http://localhost:8081/test/user
location /api {
proxy_pass http://localhost:8081/test/
}
# http://localhost:8080/api/user ==> http://localhost:8081/test//user
location /api/ {
proxy_pass http://localhost:8081/test
}
# http://localhost:8080/api/user ==> http://localhost:8081/testuser
location /api/ {
proxy_pass http://localhost:8081/test/
}
# http://localhost:8080/api/user ==> http://localhost:8081/test/user
结论
访问的url其实是由两部分组成,分别是origin(http://localhost:8080)和uri(/api/user)。
proxy_pass只包含origin,即以端口结尾(http://localhost:8081) ,此时只是将url的origin替换为proxy_pass即可proxy_pass包含uri,即不以端口结尾(http://localhost:8081/) ,此时需要将原始的url去除location块,再将得到地址的origin替换为proxy_pass即可
本文为原创文章,如需转载请注明出处,谢谢!