在 nginx 配置中使用尾部斜杠

bar*_*oma 12 nginx proxy

    location /product {
        proxy_pass http://10.0.0.25:8080;
    }
Run Code Online (Sandbox Code Playgroud)

如果我对产品文件夹使用我的第一个位置描述,我应该使用http://mysdomain.com/product/并且我不能http://mysdomain.com/product从浏览器使用 。我的意思是我应该使用 url 的斜线结尾。我想用两个状态访问产品文件夹。

这有什么区别吗:

    location /product/ {
        proxy_pass http://10.0.0.25:8080;
    }
Run Code Online (Sandbox Code Playgroud)

Ale*_*Ten 14

这些位置是不同的。/production例如,第一个将匹配,这可能不是您的预期。所以我更喜欢使用带有斜杠的位置。

另外,请注意:

如果某个位置由以斜杠字符结尾的前缀字符串定义,并且请求由 proxy_pass、fastcgi_pass、uwsgi_pass、scgi_pass 或 memcached_pa​​ss 之一处理,则响应具有等于该字符串的 URI 的请求,但没有尾部斜杠,带有代码 301 的永久重定向将返回到附加斜杠的请求 URI。

如果你有类似的东西:

location /product/ {
    proxy_pass http://backend;
}
Run Code Online (Sandbox Code Playgroud)

然后转到http://example.com/product,nginx 会自动将您重定向到http://example.com/product/.

即使您不使用上述这些指令之一,您也可以始终手动进行重定向:

location = /product {
    rewrite ^ /product/ permanent;
}
Run Code Online (Sandbox Code Playgroud)

或者,如果您不想重定向,您可以使用:

location = /product {
    proxy_pass http://backend;
}
Run Code Online (Sandbox Code Playgroud)


And*_* M. 7

不,它们不一样——您需要使用带有正则表达式的尾部斜杠来匹配两者,即

location ~ /product/?
Run Code Online (Sandbox Code Playgroud)

有关如何匹配整个 URL 的更详细响应,请参阅此相关答案。