简单总结:
如果只有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有无斜杠,地址是不同的,导致找不到服务所在位置?有大佬知道嘛。
文章讨论了Nginx中location和proxy_pass的使用规则,特别是在处理IP+端口+路径时如何正确拼接。当proxy_pass后跟路径时,可能导致额外的斜杠或路径重叠,从而影响请求的正确转发。例如,配置中的斜杠可能导致接口返回401错误。作者寻求理解这种情况下为何两种写法产生不同结果的原因。
624

被折叠的 条评论
为什么被折叠?



