【问题标题】:Proxy a request - get a parameter from URL, add a header and update request URL using Nginx代理请求 - 从 URL 获取参数,添加标头并使用 Nginx 更新请求 URL
【发布时间】:2016-03-04 14:09:37
【问题描述】:

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

  1. 拦截请求
  2. 读取 URL,解析它并从中读取一个值。
  3. 将该值添加为新的请求标头
  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 来实现这一点?

【问题讨论】:

    标签: nginx proxy header http-proxy


    【解决方案1】:

    由于数据存在于请求 URI 本身中(可通过 nginx 中的 $uri 变量获得),您可以使用 nginx lua 模块对其进行解析。 nginx 需要用 lua 编译才能工作,请参阅: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 中,我们可以从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 生成变量。

    【讨论】:

      猜你喜欢
      • 2016-03-03
      • 1970-01-01
      • 1970-01-01
      • 2016-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-06
      相关资源
      最近更新 更多