如何在 lua 块中保留查询参数并通过 host 和 proxy_pass 传递?

我有一个 lua 块用于根据节点环境填充后端 url。它转发请求但会丢弃查询参数。

location / {
set_by_lua_block $url {
if os.getenv("NODE_ENV") == 'prod' then
  return "https://example.com"
else
  return "https://www.com"
}

proxy_pass $url
}

有什么方法可以保留查询参数吗?我的请求看起来像是这样 https://newlocation.com/initialize?user=123...

点赞
用户1075298
用户1075298

首先- 确认你只想要 query string,可能你还需要将 path 转发。

根据 nginx 文档,在请求代理时,有一些变量可以用来构建 URL:

  1. $is_args - 如果请求行具有参数,则为问号,否则为空字符串;
  2. $args - 请求行中的参数;
  3. $request_uri - 原始请求uri。

因此,如果您只需要 query string,则应使用:

proxy_pass $url$is_args$args;

如果您还需要 path,则应使用:

proxy_pass $url$request_uri;
2018-02-27 10:09:47