Nginx ngx_lua如何删除http请求头

Nginx ngx_lua如何删除http请求头,nginx,openresty,Nginx,Openresty,http请求头中有一个名为“RedirectURL”的参数。我想在ngx_lua中删除它,然后将此请求发送到RedirectURL,这里是nginx.conf中的一些代码片段 location /apiproxytest { set_by_lua $redirectURL ' return ngx.req.get_headers()["RedirectURL"] '; header_

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

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指令的执行顺序与config文件中的相同。 nginx配置文件的处理有很多阶段。很好,但解释很长:

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

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

您的配置指令将按以下顺序执行:

set_by_lua directives
echo and proxy_pass directives
header_filter_by_lua directives
因此,
ngx.header[“RedirectURL”]=nil确实会在以后执行,并且不会影响您的echo指令。


您可以使用API
ngx.req.clear\u头(header)
ngx.req.set\u头(header,nil)
,这是

set_by_lua directives
echo and proxy_pass directives
header_filter_by_lua directives
location /apiproxytest {
    set_by_lua $redirectURL '
        local url = ngx.req.get_headers()["RedirectURL"]
        ngx.req.clear_header("RedirectURL")

        return url
    ';

    proxy_pass $redirectURL;
}