директиви 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директиви, але я до сих пір не бачу цей заголовок додана - будь-які ідеї?
Aditya MP

@adityamenon У вас є лише один add_header? Якщо так, то переконайтеся, що код відповіді є одним із документів, див. Nginx.org/r/add_header .
Максим Дунін

Привіт Максиме, у мене було кілька різних проблем, я нарешті маю конфігурацію, яка працює: stackoverflow.com/a/19135714/443219
Aditya MP

Посилання на документи nginx, що пояснюють це: nginx.org/en/docs/http/ngx_http_headers_module.html#add_header
siliconrockstar
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.