在 nginx 配置中使用尾部斜杠

在 nginx 配置中使用尾部斜杠
    location /product {
        proxy_pass http://10.0.0.25:8080;
    }

如果我使用第一个位置描述作为产品文件夹,我应该使用http://mysdomain.com/product/,但我不能 http://mysdomain.com/product从浏览器中使用。我的意思是我应该在 URL 末尾使用斜线。我想在两种情况下访问产品文件夹。

这之间有什么区别吗:

    location /product/ {
        proxy_pass http://10.0.0.25:8080;
    }

答案1

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

另请注意:

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

如果你有类似的东西:

location /product/ {
    proxy_pass http://backend;
}

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

即使您不使用上述任何一个指令,您也可以随时手动执行重定向:

location = /product {
    rewrite ^ /product/ permanent;
}

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

location = /product {
    proxy_pass http://backend;
}

答案2

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

location ~ /product/?

这个相关答案了解有关如何匹配整个 URL 的更详细答复。

相关内容