删除nginx中的查询参数(如果存在)

时间:2017-02-13 09:53:57

标签: http nginx lua

在nginx配置中,我试图添加一个添加http请求参数的参数。 http://somehost:8080/someurl?foo=bar作为http标头存在,应将其添加为查询参数

x_user_id(标题1234 http://otherhost?foo=bar&userId=1234) 应重定向到 user_id

此外,如果存在http://somehost:8080/someurl?foo=bar&userId=6666参数,则应将其删除:

x_user_id(标题1234 http://otherhost?foo=bar&userId=1234) 应重定向到 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} ; }

现在我已经看到了问题Nginx Redirect - Remove a specific query parameter from URL,但在nginx中这样做似乎相当神秘。此文件还说if is evil

我尝试了类似

的东西
local args = ngx.req.get_uri_args()
local headers = ngx.req.get_headers()

args.userId = nil -- remove user_id parameter
args.userId = headers.x_user_id

ngx.req.set_uri_args(args)

但是,首先它不起作用。 它可能会让它发挥作用,但它可能是不可维护的,而且非常神秘。

我还看到有一个模块lua,通过使用它,它似乎更容易,可以使用更高级别的编程模型:

myEvent+=myEvent_handler

void myEvent_handler()
{
  try
  {
     MyMethod1();
  }
  catch (Exception ex)
  {
     //handle it
  }
  try
  {
     MyMethod2();
  }
  catch (Exception ex)
  {
    //handle it
  }

对于不熟悉nginx配置的人来说,这似乎很容易阅读。 不幸的是,lua不包含在vanilla nginx中,因此我无法使用它。

如何做到这一点的方式不会使配置文件过于神秘?

nginx甚至是正确的地方吗?

0 个答案:

没有答案