Nginx - 如果$request_uri存在,则代理到一个URL,否则代理到另一个URL

3
我希望处理两种情况:test.example.comtest.example.com/ABC
  1. 如果输入的url是基础域名(test.example.com),我想要proxy_pass到给定的端点(比如说example.com/home)。
  2. 如果给出test.example.com/ABC,我想要proxy_passexample.com/confirm/ABC

我像这样使(1)工作:

server {
     listen 443 ssl;
     listen [::]:443 ssl;

     server_name test.example.com;

     location / {
         proxy_pass https://example.com/home;
     }
}

但我无法想出如何表达“如果$request_uri存在,则代理传输到不同的端点”。我尝试了:

location / {
    if ($request_uri) {
       proxy_pass https://example.com/confirm/$request_uri;
    }
 
    proxy_pass https://example.com/home;
}

我该如何实现这个目标?

1个回答

3

$request_uri 始终存在且永远不为空。域的根URI是单个斜杠/(即使它在浏览器的地址栏中没有显示)。

匹配该URI的location块为location = /。详情请参见此文档

例如:

location = / {
    proxy_pass https://example.com/home;
}
location / {
    proxy_pass https://example.com/confirm/;
}

第一个location块仅匹配根URI /,而第二个location块匹配任何其他URI。 URI的其余部分会自动附加到/confirm/。有关详细信息,请参见此文档

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接