使用nginx 1.2.1add_header
在某些情况下我可以使用。
这是一个工作示例:
server {
listen 80;
server_name localhost;
root /var/www;
add_header Name1 Value1; <=== HERE
add_header Name2 Value2; <=== HERE
location / {
echo "Nginx localhost site";
}
}
结果
GET /
HTTP/1.1 200 OK
Name1: Value1
Name2: Value2
这是不起作用的东西:如果我使用add_header
里面的指令location
,则下面的其他add_header
指令server
将被忽略:
server {
listen 80;
server_name localhost;
root /var/www;
add_header Name1 Value1; <=== HERE
add_header Name2 Value2; <=== HERE
location / {
add_header Name3 Value3; <=== HERE
add_header Name4 Value4; <=== HERE
echo "Nginx localhost site";
}
}
结果
GET /
HTTP/1.1 200 OK
Name3: Value3
Name4: Value4
这文档说和server
都是location
有效的context
,并没有说明add_header
在一个中使用会阻止在另一个中使用它。
Q1:您知道这是一个错误还是预期的行为以及原因是什么?
问题 2:除了使用HttpHeadersMoreModule
模块?
答案1
这是预期行为。这些指令与 nginx 中所有其他数组类型指令非常相似,当且仅当当前级别上add_header
没有定义指令时,才会从上一级继承。add_header
如果你希望 nginx 在 中添加所有标头location /
,则必须将它们全部列出location /
,即
location / {
add_header Name1 Value1;
add_header Name2 Value2;
add_header Name3 Value3;
add_header Name4 Value4;
return 200 "";
}
如果你需要一种方法来在一个地方列出大量的标题子集,你可以使用include
指令来实现这一点。请参阅文档这里。