如何在nginx(1.4.6 ubuntu)配置中有条件地添加标头?
起初我试过这样的.
location / {
add_header X-TEST-0 always-0;
set $true 1;
if ($true) {
add_header X-TEST-1 only-true;
}
add_header X-TEST-2 always-2;
}
Run Code Online (Sandbox Code Playgroud)
虽然我期望我的nginx设置所有标题(X-TEST-0,1,2),但它只添加了标题X-TEST-1.
接下来我试着这样.
location / {
add_header X-TEST-0 always-0;
##set $true 1;
##if ($true) {
## add_header X-TEST-1 only-true;
##}
add_header X-TEST-2 always-2;
}
Run Code Online (Sandbox Code Playgroud)
我的nginx按照我的预期添加了标题X-TEST-1和X-TEST-2.
我的问题是......
如何有条件地添加标题?
为什么nginx只添加X-TEST-1和我上面的第一个例子?
提前致谢!
Ed *_*all 11
如果您以不同的方式思考并使用地图,这很简单。
map $variable $headervalue {
1 only-true;
default '';
}
# ...later...
location / {
add_header X-TEST-1 $headervalue;
}
Run Code Online (Sandbox Code Playgroud)
如果 $variable 为 1,则 $headervalue 将被设置,因此将添加标题。默认情况下 $headervalue 将为空并且不会添加标题。
这是有效的,因为 Nginx 仅在需要时评估地图(当它到达引用 $headervalue 的点时)。
见类似:https : //serverfault.com/questions/598085/nginx-add-header-conditional-on-an-upstream-http-variable
我使用lua nginx模块来解决类似的问题:
localtion / {
header_filter_by_lua_block {
ngx.header["X-TEST-0"] = "always-0";
# example of conditional header
if ngx.req.get_method() == ngx.HTTP_POST {
ngx.header["X-TEST-1"] = "only if POST request";
}
ngx.header["X-TEST-2"] = "always-2";
}
}
Run Code Online (Sandbox Code Playgroud)
https: //github.com/openresty/ lua- nginx-module#header_filter_by_lua_block```
| 归档时间: |
|
| 查看次数: |
10510 次 |
| 最近记录: |