NGINX代理传递请求URL的一部分
我希望在我的NGINX配置中执行以下操作:我希望代理传递路径和查询参数,但不包括第一个路径参数(path1) 请求URLNGINX代理传递请求URL的一部分,nginx,proxypass,Nginx,Proxypass,我希望在我的NGINX配置中执行以下操作:我希望代理传递路径和查询参数,但不包括第一个路径参数(path1) 请求URL https://my-domain.com/path1/path2?query1=some-查询 我想把这个传给你 http://localhost:8000/path2?query1=some-查询 我已尝试使用以下位置块 location /path1/path2/ { proxy_pass http://localhost:8000$request_uri; p
https://my-domain.com/path1/path2?query1=some-查询
我想把这个传给你
http://localhost:8000/path2?query1=some-查询
我已尝试使用以下位置块
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(.*) $1 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;
在位置块中。这非常简单:
location /path1/ {
proxy_pass http://localhost:8000/;
proxy_http_version 1.1;
}
详情请参阅Q/A
更新
OP澄清问题后,此解决方案不可用
如果所有其他路径共享公共后缀path2
:
location /path1/path2 {
rewrite ^/path1(.*) $1 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;
在位置块内。你好,伊万,谢谢你的评论。我忘了说明为什么我也不能这样做。我刚刚用一个附加的注释修改了这个问题。嗨,伊万,谢谢你的评论。我忘了说明为什么我也不能这样做。我刚刚补充了一条,修改了这个问题。