在 Nginx 的 proxy_pass 配置中末尾是否有斜杠的区别

8 min read

在 Nginx 的 proxy_pass 配置中,末尾是否有斜杠(/)会影响如何转发请求的 URI(统一资源标识符)部分给代理服务器。具体来说:

有斜杠 / 的情况:

location /read/ {
    proxy_pass http://127.0.0.1:3006/;
}

在这种情况下,当一个请求匹配到 location /read/ 时,/read/ 部分会被替换成 proxy_pass 中的 URI 的末尾斜杠之后的内容。如果 proxy_pass 没有特定的 URI(如上例所示),则相当于 location 中的 /read/ 会被剥离掉,仅将剩余部分的 URI 发送到代理服务器。

举个例子,如果有一个请求是针对 /read/example 的,代理请求将会是 http://127.0.0.1:3006/example

没有斜杠的情况:

location /read/ {
    proxy_pass http://127.0.0.1:3006;
}

在这种情况下,整个请求的 URI 部分(包括 /read/)将会被发送到代理服务器。所以,如果有一个请求是针对 /read/example 的,代理请求将会是 http://127.0.0.1:3006/read/example

总结:

  • 有斜杠location 匹配的 URI 部分被剥离掉,只有剩余部分被传递给代理服务器。
  • 无斜杠:整个请求的 URI(包括匹配 location 的部分)被传递给代理服务器。

这种差异在配置反向代理时非常重要,因为它影响后端服务如何接收和解释请求的路径。根据您的后端服务配置和期望的行为,您需要选择合适的方式。