Nginx 不区分大小写的位置和区分大小写的 proxy_pass

Nginx 不区分大小写的位置和区分大小写的 proxy_pass

我们在多个地点设置了反向代理。我们当前正在运行的配置如下:

upstream backends {
    server Backend1;
    server Backend2;
}

server {
    ... other server config stuff here ...

    location /App1 {
        ... proxy header stuff ...

        proxy_pass http://backends/App1;
     }
}

现在我们要做的是设置它,以便区分大小写的后端(在本例中为 Backend1/2http://backends/App1)可以不区分大小写,以便您可以访问http://example.com/app1或者http://example.com/App1(或任何变体)

我们尝试运行的新配置如下:

location ~* /App1 {
    proxy_pass http://backends/App1;
}

但当我们重新加载配置时,却没有任何效果。我们看到了错误:

“proxy_pass” 不能在正则表达式给出的位置、或在命名位置、或在“if”语句、或在“limit_except”内有 URI 部分...

对于我们如何实现这一目标,您有什么想法/见解吗?

答案1

在存在正则表达式位置的情况下,执行的隐式重写proxy_pass将不起作用。请参阅这个文件了解更多信息。

但是,您可以使用来rewrite ... break执行相同的功能。

location ~* /App1(?<stuff>.*)$ {
    rewrite ^ /App1$stuff break;
    proxy_pass http://backends;
}

正则表达式通过命名捕获进行扩展以获取 URI 的其余部分,然后该rewrite语句构建一个新的 URI 以传递上游。

这个文件了解详情。

相关内容