代理请求 - 从 URL 获取参数,添加 header 并使用 Nginx 更新请求 URL

Proxy a request - get a parameter from URL, add a header and update request URL using Nginx

我正在寻找一种使用 Nginx 执行以下操作的方法:

  1. 拦截请求
  2. 读取 URL,解析它并从中读取一个值。
  3. 将该值添加为新请求header
  4. 更新 URL(删除特定值)
  5. 将请求转发到另一台服务器

例如

Request URL - http://<<nginx>>/test/001.xml/25
Final URL - http://<<server>>/test/001.xml with header (x-replica: 25)

我有一个 nginx 服务器设置,带有实际服务器的上游。我想知道如何设置 Nginx 来实现此目的?

由于数据存在于请求 URI 本身中(由 nginx 中的 $uri 变量提供),您可以使用 nginx lua 模块解析它。 nginx 需要用 lua 编译才能工作,请参阅:openresty's nginx lua module.

从那里您可以使用给定 $uriset_by_lua_blockset_by_lua_file directive 作为参数。

在配置中,这看起来像:

location / {
    ...
    set_by_lua_file $var_to_set /path/to/script.lua $uri;
    # $var_to_set would contain the result of the script from this point
    proxy_set_header X-Replica $var_to_set;
    ...
}

script.lua 中,我们可以从 ngx.arg 列表中访问 $uri 变量(参见 these docs):

function parse_uri( uri )
    parsed_uri = uri
    -- Parse logic here
    return parsed_uri
end

return parse_uri( ngx.arg[1] )

同样,您可以修改此函数或创建另一个函数以使用更新的 $uri.

创建一个变量