Nginx - 如果 $request_uri 存在 proxy_pass 一个 url,否则另一个 url
Nginx - if $request_uri exists proxy_pass one url, otherwise another url
我想处理 2 个案例:test.example.com
和 test.example.com/ABC
。
如果输入的url是基域(test.example.com
),我想proxy_pass
一个给定的端点(比方说example.com/home
) .
如果给出test.example.com/ABC
,我想proxy_pass
到example.com/confirm/ABC
- test.example.com = https://example.com/home
- test.example.com/ABC = https://example.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。
我想处理 2 个案例:test.example.com
和 test.example.com/ABC
。
如果输入的url是基域(
test.example.com
),我想proxy_pass
一个给定的端点(比方说example.com/home
) .如果给出
test.example.com/ABC
,我想proxy_pass
到example.com/confirm/ABC
- test.example.com = https://example.com/home
- test.example.com/ABC = https://example.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。