对 nginx 中的尾部斜杠行为有点困惑

Uto*_*pia 7 nginx

nginx 中的尾随斜杠最近让我彻夜难眠。请求一些帮助

问题.中奇怪的尾部斜杠行为proxy_pass

那么为什么这会起作用:

location /myapi/ {
      proxy_pass   http://node_server8/;
    }
Run Code Online (Sandbox Code Playgroud)

这不会

location /myapi/ {
      proxy_pass   http://node_server8;
    }
Run Code Online (Sandbox Code Playgroud)

http://node_server8请注意第二个代码块末尾缺少的尾部斜杠。这特别奇怪,因为我有一些其他配置,其中后端没有尾部斜杠,并且一切正常。

Ric*_*ith 9

他们是完全不同的。

在第一个proxy_pass语句中,您包含了一个值为 的 URI 参数/。第二个你没有。

当您给出proxy_passURI 参数(在 prefix 内location)时,它会像alias函数一样转换请求的 URI,从而用location指令的值替换 URI 参数的值。例如在被上游传递之前/myapi/foo变成/foo

如果您不提供proxy_passURI 参数,则不会发生任何转换,并且请求/myapi/foo会原封不动地传递到上游。

有关详细信息,请参阅此文档