【问题标题】:Nginx - if $request_uri exists proxy_pass one url, otherwise another urlNginx - 如果 $request_uri 存在 proxy_pass 一个 url,否则另一个 url
【发布时间】:2020-07-30 17:40:31
【问题描述】:

我要处理两种情况: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;
}

我怎样才能做到这一点?

【问题讨论】:

    标签: nginx reverse-proxy nginx-reverse-proxy request-uri


    【解决方案1】:

    $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

    【讨论】:

      猜你喜欢
      • 2013-10-05
      • 2015-09-09
      • 1970-01-01
      • 1970-01-01
      • 2019-12-12
      • 2023-03-08
      • 2016-07-13
      • 1970-01-01
      • 2022-01-22
      相关资源
      最近更新 更多