我想在 NGINX 配置中执行以下操作: 我想代理传递路径和查询参数,但不包含第一个路径参数 (path1)。
请求网址
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;
}
Run Code Online (Sandbox Code Playgroud)
但是,这不会到达正确的端点,因为我认为它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;
}
Run Code Online (Sandbox Code Playgroud)
附加编辑:
我也不能简单地做
location /path1/ {
proxy_pass http://localhost:8000/;
proxy_http_version 1.1;
}
Run Code Online (Sandbox Code Playgroud)
因为我已经有了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";
}
Run Code Online (Sandbox Code Playgroud)
我在网上搜索了很多,但找不到适合我的特定场景的配置。
这真的很简单:
location /path1/ {
proxy_pass http://localhost:8000/;
proxy_http_version 1.1;
}
Run Code Online (Sandbox Code Playgroud)
阅读此问答了解详细信息。
在 OP 澄清他的问题后,该解决方案不再可用。
如果所有附加路径共享公共后缀path2:
location /path1/path2 {
rewrite ^/path1(.*) $1 break; # remove '/path1' URI prefix
proxy_pass http://localhost:8000;
proxy_http_version 1.1;
}
Run Code Online (Sandbox Code Playgroud)
如果不是,请替换location /path1/path2为location ~ ^/path1/(?:path2a|path2b|path2c)。
如果您需要传递到与请求附带的后端查询参数不同的参数,请使用
set $args query1=some-query;
Run Code Online (Sandbox Code Playgroud)
在位置块内。
| 归档时间: |
|
| 查看次数: |
4313 次 |
| 最近记录: |