在nginx中删除查询参数

在nginx配置中,我正在尝试添加一个参数,用于添加HTTP请求参数。一个名为x_user_id的HTTP头已经存在,此头应该被添加为查询参数

http://somehost:8080/someurl?foo=bar ( Header x_user_id 1234 ) 应该被重定向到 http://otherhost?foo=bar&userId=1234

此外,如果存在user_id参数,则应该删除它:

http://somehost:8080/someurl?foo=bar&userId=6666 ( Header x_user_id 1234) 应该被重定向到 http://otherhost?foo=bar&userId=1234

现在我发现了这个问题Nginx重定向-从URL中删除特定查询参数,但是在nginx中似乎有点难以理解。 此外,这个文档说,if是邪恶的

我尝试过类似于

if ($request_uri ~ "([^\?]*)\?(.*)?userId=([^&]*)[&]?(.*)") {
   set $original_path $1;
   set $args1 $2;
   set $unwanted $3;
   set $args2 $4;
   set $args "";

   proxy_pass https://httpbin.org/get?${args1}${args2} ;
}

但是,首先它没有工作。 可能可以使它工作,但它可能会变得难以维护和相当难以理解。

我也看到了一个lua模块,并且通过使用它,似乎更容易使用更高级的编程模型,例如:

local args = ngx.req.get_uri_args()
local headers = ngx.req.get_headers()

args.userId = nil -- 删除user_id参数
args.userId = headers.x_user_id

ngx.req.set_uri_args(args)

对于不熟悉nginx配置的人来说,这似乎是很好理解的。 不幸的是,lua未包含在原始的nginx中,因此我无法使用它。

如何以不使配置文件过于难以理解的方式进行此操作?

nginx是否是正确的地方来处理它?

点赞