add_header指令在位置覆盖服务器中的add_header指令

使用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指令时, server下的其他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 

该文档说, serverlocation都是有效的context ,并没有说明在其中使用add_header防止使用它。

问题1:你知道这是一个错误还是预期的行为,为什么?

问题2:你看到其他的select,比使用HttpHeadersMoreModule模块来解决这个问题吗?

这是预期的行为。 与当前级别上定义的add_header指令一样, add_header指令与nginx中的所有其他数组types指令非常相似,都是从前一级inheritance而来的。

如果你想让nginx在location /添加所有的头文件,你必须把它们全部列在location /

 location / { add_header Name1 Value1; add_header Name2 Value2; add_header Name3 Value3; add_header Name4 Value4; return 200 ""; } 

如果你需要一种方法来在一个地方列出大量的头文件,你可以使用include指令。 在这里看到文档。