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

前端之家收集整理的这篇文章主要介绍了ubuntu – 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指令时,将忽略服务器下的其他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@
@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@

猜你在找的Ubuntu相关文章