简单总结:
如果只有ip+端口:符合location的,直接拼接。proxy_pass+路径。
如果是ip+端口+路径:就把原来请求中location的部分去掉,然后拼在proxy_pass路径后面。
例子:
如果请求是http://12.34.56.78:1234/api/user/login
配置端口后面不写东西:
location /api {
proxy_pass http://11.22.33.44:5556;
}
就直接拼接:
结果就是 http://11.22.33.44:5556/api/user/login
如果端口后面有路径,斜杠也算,比如这么写
location /api {
proxy_pass http://11.22.33.44:5556/;
}
那么就是
结果就是http://11.22.33.44:5556//user/login,注意多了一杠。
所以要想正确,就要写成/api/。
如果端口后面有路径,请求是http://12.34.56.78:1234/api/user/login:
location /api {
proxy_pass http://11.22.33.44:5556/test;
}
那么:
结果就是 http://11.22.33.44:5556/test/user/login
如果test后面还有/,那就变成test//user/login了。
这部分前端写起来比较熟悉,和各个框架的proxy_table规则基本一致
把proxy_pass和location理解为target和pathRewrite就好了。
但是,最近发现location和proxy_pass都加上/,接口报错401,都去掉就正确了,发现这两种写法的结果是一致的,但就是存在问题。
推测是proxy_pass有无斜杠,地址是不同的,导致找不到服务所在位置?有大佬知道嘛。