ngx_lua 如何删除 http 请求 header
ngx_lua how to remove http request header
在 http 请求 header 中有一个名为 "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 指令的执行顺序与配置文件中的顺序相同。
nginx 配置文件的处理有很多阶段。很好,但很长的解释:Nginx directive execution order
In their execution order the phases are post-read, server-rewrite,
find-config, rewrite, post-rewrite, preaccess, access, post-access,
try-files, content, and finally log.
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
确实稍后执行并且对您的 echo 指令没有影响。
location /apiproxytest {
set_by_lua $redirectURL '
local url = ngx.req.get_headers()["RedirectURL"]
ngx.req.clear_header("RedirectURL")
return url
';
proxy_pass $redirectURL;
}
可以使用APIngx.req.clear_header(header)
或者ngx.req.set_header(header, nil)
,也就是
在 http 请求 header 中有一个名为 "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 指令的执行顺序与配置文件中的顺序相同。 nginx 配置文件的处理有很多阶段。很好,但很长的解释:Nginx directive execution order
In their execution order the phases are post-read, server-rewrite, find-config, rewrite, post-rewrite, preaccess, access, post-access, try-files, content, and finally log.
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
确实稍后执行并且对您的 echo 指令没有影响。
location /apiproxytest {
set_by_lua $redirectURL '
local url = ngx.req.get_headers()["RedirectURL"]
ngx.req.clear_header("RedirectURL")
return url
';
proxy_pass $redirectURL;
}
可以使用APIngx.req.clear_header(header)
或者ngx.req.set_header(header, nil)
,也就是