代理请求 - 从URL获取参数,使用Nginx添加标头和更新请求URL

时间:2015-11-30 20:10:08

标签: nginx proxy header http-proxy

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

  1. 拦截请求
  2. 读取URL,解析并从中读取值。
  3. 将该值添加为新的请求标题
  4. 更新网址(删除特定值)
  5. 将请求转发给其他服务器
  6. 例如

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

    我的nginx服务器设置为实际服务器的上游。我想知道如何设置Nginx来实现这个目标?

1 个答案:

答案 0 :(得分:2)

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

您可以使用set_by_lua_blockset_by_lua_file directive $uri作为参数。

在配置中,这看起来像是:

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我们可以访问$uri列表中的ngx.arg变量(参见these docs):

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

return parse_uri( ngx.arg[1] )

同样,您可以修改此功能或创建另一个功能以使用更新的$uri制作变量。