директивы add_header в расположении перезаписывают директивы add_header на сервере

11

Используя 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

Однако, как только я использую 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: Знаете ли вы, это ошибка или предполагаемое поведение и почему?

Q2: Видите ли вы другие варианты, чтобы исправить это, чем с помощью HttpHeadersMoreModuleмодуля?

Максимум
источник

Ответы:

18

Это ожидаемое поведение. Эти add_headerдирективы, как и все другие директивы массив типа в Nginx, унаследованы от предыдущего уровня , если и только если нет 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для этого директиву. Смотрите документы здесь .

Максим Дунин
источник
У меня есть только add_headerвнутри locationдирективы, но я до сих пор не вижу этот заголовок добавлен - есть идеи?
депутат Адитья,
@adityamenon У тебя есть только один add_header? Если да, то убедитесь, что код ответа один из документов, см. Nginx.org/r/add_header .
Максим Дунин
Привет Максим, у меня было несколько разных проблем, у меня наконец есть конфигурация, которая работает: stackoverflow.com/a/19135714/443219
Aditya MP
Ссылка на nginx docs объясняет это: nginx.org/en/docs/http/ngx_http_headers_module.html#add_header
silicrockstar