Nginx ngx_lua如何删除http请求头
http请求头中有一个名为“RedirectURL”的参数。我想在ngx_lua中删除它,然后将此请求发送到RedirectURL,这里是nginx.conf中的一些代码片段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_
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指令。
您可以使用APIngx.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;
}