带有正则表达式的 NGinx 位置指令
NGinx location directive with Regex
我正在寻找一种方法让我的 NGinx LB 进行以下转换。
- 用户访问权限URL:
https://example.com/t/foo.com/common/<something>
- LB 代理:
https://example.com/<something>?t=foo.com
首先,这个可以做吗?
我尝试了以下配置,但没有按预期工作。
server {
listen 443;
server_name example.com;
ssl on;
ssl_certificate /etc/ssl/certs/example-selfsigned.crt;
ssl_certificate_key /etc/ssl/private/example-selfsigned.key;
location /t/[a-z.]+/common/ {
rewrite ^(/t/.*)/common/(.*)$ https://192.168.1.3:9443/?t= break;
proxy_pass https://192.168.1.3:9443/;
}
}
如有任何帮助,我们将不胜感激!
正则表达式匹配位置应使用 ~
(或 ~*
用于不区分大小写的匹配)修饰符。当你想重写一个要用 proxy_pass
指令代理的 URI 时,你不应该将方案或域部分添加到你的 rewrite
指令中。尝试以下操作:
location ~ ^/t/(?<t>[a-z.]+)/common(?<path>/.*) {
rewrite ^ $path?t=$t break;
proxy_pass proxy_pass https://192.168.1.3:9443;
}
我正在寻找一种方法让我的 NGinx LB 进行以下转换。
- 用户访问权限URL:
https://example.com/t/foo.com/common/<something>
- LB 代理:
https://example.com/<something>?t=foo.com
首先,这个可以做吗?
我尝试了以下配置,但没有按预期工作。
server {
listen 443;
server_name example.com;
ssl on;
ssl_certificate /etc/ssl/certs/example-selfsigned.crt;
ssl_certificate_key /etc/ssl/private/example-selfsigned.key;
location /t/[a-z.]+/common/ {
rewrite ^(/t/.*)/common/(.*)$ https://192.168.1.3:9443/?t= break;
proxy_pass https://192.168.1.3:9443/;
}
}
如有任何帮助,我们将不胜感激!
正则表达式匹配位置应使用 ~
(或 ~*
用于不区分大小写的匹配)修饰符。当你想重写一个要用 proxy_pass
指令代理的 URI 时,你不应该将方案或域部分添加到你的 rewrite
指令中。尝试以下操作:
location ~ ^/t/(?<t>[a-z.]+)/common(?<path>/.*) {
rewrite ^ $path?t=$t break;
proxy_pass proxy_pass https://192.168.1.3:9443;
}