Nginx - 如果 $request_uri 存在 proxy_pass 一个 url,否则另一个 url

Nginx - if $request_uri exists proxy_pass one url, otherwise another url

我想处理 2 个案例: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 存在,proxy_pass 到不同的端点”。我试过了:

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

我怎样才能做到这一点?

$request_uri 永远存在,永远不会为空。您域的根目录的 URI 是单个 /(即使它没有显示在浏览器的地址栏中)。

匹配该 URI 的 location 块是 location = /。有关详细信息,请参阅 this document

例如:

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

第一个 location 块只匹配根 URI /,第二个 location 块匹配任何其他 URI。 URI 的其余部分自动附加到 /confirm/。有关详细信息,请参阅 this document