【问题标题】:ngx_lua how to remove http request headerngx_lua如何删除http请求头
【发布时间】:2017-05-05 14:48:52
【问题描述】:

http 请求标头中有一个名为“RedirectURL”的参数。我想在 ngx_lua 中删除它,然后将此请求发送到 RedirectURL,这里是 nginx.conf 中的一些 sn-p

location /apiproxytest {

           set_by_lua $redirectURL '
                    return ngx.req.get_headers()["RedirectURL"]
            ';

            header_filter_by_lua '
                     ngx.header["RedirectURL"] = nil;
            ';

            echo "1:" $redirectURL;

            set_by_lua $redirectURL2 '
                    return ngx.req.get_headers()["RedirectURL"]
            ';
            echo "2:" $redirectURL2;

            proxy_pass $redirectURL;
}   

当我测试它时使用

curl --header "RedirectURL:www.google.com" xx.xx.xx.xx:xx/apiproxytest

我得到结果:

1: www.google.com
2: www.google.com

我不知道错在哪里。谁能帮我弄清楚? 感谢您的帮助!

【问题讨论】:

    标签: nginx openresty


    【解决方案1】:

    ngx.req.clear_header

    location /apiproxytest {
        set_by_lua $redirectURL '
            local url = ngx.req.get_headers()["RedirectURL"]
            ngx.req.clear_header("RedirectURL")
    
            return url
        ';
    
        proxy_pass $redirectURL;
    }
    

    【讨论】:

      【解决方案2】:

      这是常见的错误。您认为 nginx 指令的执行顺序与配置文件中的顺序相同。 nginx配置文件的处理有很多阶段。很好,但很长的解释:Nginx directive execution order

      在它们的执行顺序中,阶段是读取后、服务器重写、 查找配置,重写,重写后,预访问,访问,后访问, 尝试文件、内容,最后是日志。

      set_by_lua - phase: rewrite
      echo - phase: content
      proxy_pass - phase: content
      header_filter_by_lua - phase: output-header-filter
      

      您可能会看到未列出的阶段 - output-header-filter。 我也知道输出体过滤器。 这些是特殊阶段,并以不同的方式实现,然后是重写、连接等阶段。 我找不到这些阶段的文档。欢迎任何帮助! 但显然他们不能早于内容阶段。

      您的配置指令按下一个顺序执行:

      set_by_lua directives
      echo and proxy_pass directives
      header_filter_by_lua directives
      

      所以ngx.header["RedirectURL"] = nil 确实是稍后执行的,对你的回显指令没有影响。

      【讨论】:

        【解决方案3】:

        您可以使用API​​ngx.req.clear_header(header)ngx.req.set_header(header, nil),即

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-02-06
          • 2015-01-20
          • 2014-03-08
          • 2012-01-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多