NGINX 代理传递部分请求 URL
NGINX proxy pass a portion of the request URL
我想在我的 NGINX 配置中执行以下操作:我想代理传递路径和查询参数但不包括第一个路径参数 (path1)。
请求URL
https://my-domain.com/path1/path2?query1=some-query
我想要这个 proxy_pass 到
http://localhost:8000/path2?query1=some-query
我已尝试使用以下位置块
location /path1/path2/ {
proxy_pass http://localhost:8000$request_uri;
proxy_http_version 1.1;
}
但是,这不会转到正确的端点,因为我认为它也包含 path1
参数。我有几个不同的 path2
路由,所以我希望能够轻松地捕获并重定向它们 - 而不必像这样手动定义每个路由:
location /path1/path2a/ {
proxy_pass http://localhost:8000/path2a?query1=some-query;
proxy_http_version 1.1;
}
location /path1/path2b/ {
proxy_pass http://localhost:8000/path2b?query1=some-query;
proxy_http_version 1.1;
}
location /path1/path2c/ {
proxy_pass http://localhost:8000/path2c?query1=some-query;
proxy_http_version 1.1;
}
附加编辑:
我也做不到
location /path1/ {
proxy_pass http://localhost:8000/;
proxy_http_version 1.1;
}
因为我已经有 location /path1/
块升级到不同端点的 WebSocket 连接:
location /path1/ {
proxy_pass http://localhost:9000/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
}
我在网上搜索了很多,但找不到适合我的特定场景的配置。
这真的很简单:
location /path1/ {
proxy_pass http://localhost:8000/;
proxy_http_version 1.1;
}
阅读 Q/A 了解详情。
更新
在OP澄清了他的问题后,此解决方案无法使用。
如果所有附加路径共享共同的后缀 path2
:
location /path1/path2 {
rewrite ^/path1(.*) break; # remove '/path1' URI prefix
proxy_pass http://localhost:8000;
proxy_http_version 1.1;
}
如果不是,请将 location /path1/path2
替换为 location ~ ^/path1/(?:path2a|path2b|path2c)
。
如果您需要向后端传递与请求附带的不同的查询参数,请使用
set $args query1=some-query;
在位置块内。
我想在我的 NGINX 配置中执行以下操作:我想代理传递路径和查询参数但不包括第一个路径参数 (path1)。
请求URL
https://my-domain.com/path1/path2?query1=some-query
我想要这个 proxy_pass 到
http://localhost:8000/path2?query1=some-query
我已尝试使用以下位置块
location /path1/path2/ {
proxy_pass http://localhost:8000$request_uri;
proxy_http_version 1.1;
}
但是,这不会转到正确的端点,因为我认为它也包含 path1
参数。我有几个不同的 path2
路由,所以我希望能够轻松地捕获并重定向它们 - 而不必像这样手动定义每个路由:
location /path1/path2a/ {
proxy_pass http://localhost:8000/path2a?query1=some-query;
proxy_http_version 1.1;
}
location /path1/path2b/ {
proxy_pass http://localhost:8000/path2b?query1=some-query;
proxy_http_version 1.1;
}
location /path1/path2c/ {
proxy_pass http://localhost:8000/path2c?query1=some-query;
proxy_http_version 1.1;
}
附加编辑:
我也做不到
location /path1/ {
proxy_pass http://localhost:8000/;
proxy_http_version 1.1;
}
因为我已经有 location /path1/
块升级到不同端点的 WebSocket 连接:
location /path1/ {
proxy_pass http://localhost:9000/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
}
我在网上搜索了很多,但找不到适合我的特定场景的配置。
这真的很简单:
location /path1/ {
proxy_pass http://localhost:8000/;
proxy_http_version 1.1;
}
阅读
更新
在OP澄清了他的问题后,此解决方案无法使用。
如果所有附加路径共享共同的后缀 path2
:
location /path1/path2 {
rewrite ^/path1(.*) break; # remove '/path1' URI prefix
proxy_pass http://localhost:8000;
proxy_http_version 1.1;
}
如果不是,请将 location /path1/path2
替换为 location ~ ^/path1/(?:path2a|path2b|path2c)
。
如果您需要向后端传递与请求附带的不同的查询参数,请使用
set $args query1=some-query;
在位置块内。