使用Nginx 1.2.1我可以使用add_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
但是,当我在location中使用add_header指令时,将忽略服务器下的其他add_header指令
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
documentation表示服务器和位置都是有效的上下文,并没有说明在一个中使用add_header会阻止在另一个中使用它.
Q1:你知道这是一个bug还是预期的行为?为什么?
Q2:除了使用HttpHeadersMoreModule
模块之外,您还看到其他选项吗?
@H_301_21@
这是预期的行为. add_header指令与Nginx中的所有其他数组类型指令非常相似,当前和当前级别上没有定义add_header指令时,它们继承自上一级别.
如果您希望Nginx在位置/中添加所有标题,则必须在位置/中列出所有标题,即
location / { add_header Name1 Value1; add_header Name2 Value2; add_header Name3 Value3; add_header Name4 Value4; return 200 ""; }
如果您需要在单个位置列出大型标头子集的方法,可以使用include指令.见文档here.
@H_301_21@