3

我想处理 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;
}

我怎样才能做到这一点?

4

1 回答 1

3

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

location与该 URI 匹配的块是location = /. 有关详细信息,请参阅此文档

例如:

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

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

于 2020-07-30T17:54:24.557 回答