dyrektywy add_header w lokalizacji zastępują dyrektywy add_header na serwerze

11

Używanie nginx 1.2.1 Jestem w stanie dodać wiele nagłówków add_headerw następujący sposób:

server {
    listen       80;
    server_name  localhost;
    root /var/www;
    add_header Name1 Value1;      <=== HERE
    add_header Name2 Value2;      <=== HERE

    location / {
        echo "Nginx localhost site";
    }
}

Wynik

GET /
HTTP/1.1 200 OK
Name1: Value1
Name2: Value2

Jednak gdy tylko skorzystam z tej add_headerdyrektywy location, pozostałe add_headerdyrektywy serversą ignorowane

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";
    }
}

Wynik

GET /
HTTP/1.1 200 OK
Name3: Value3
Name4: Value4

Dokumentacja mówi, że zarówno serveri locationsą ważne contexti nie precyzuje, że używanie add_headerw jednym uniemożliwia użycie go w drugiej.

P1: Czy wiesz, czy jest to błąd lub zamierzone zachowanie i dlaczego?

P2: Czy widzisz inne opcje, aby to naprawić, niż korzystanie z HttpHeadersMoreModulemodułu?

Max
źródło

Odpowiedzi:

18

Jest to oczekiwane zachowanie. Te add_headerdyrektywy, podobnie jak wszystkich innych dyrektyw tablica typu w nginx, są dziedziczone z poprzedniego poziomu tylko wtedy, gdy nie istnieją żadne add_headerwytyczne określone na obecnym poziomie.

Jeśli chcesz, aby nginx dodał wszystkie nagłówki w location /, musisz je wszystkie wymienić location /, tj

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

Jeśli potrzebujesz sposobu na wyświetlenie dużego podzbioru nagłówków w jednym miejscu, możesz użyć includedo tego dyrektywy. Zobacz dokumenty tutaj .

Maxim Dounin
źródło
Mam tylko add_headertreść locationdyrektywy, ale nadal nie widzę dodanego tego nagłówka - jakieś pomysły?
Aditya, poseł
@adityamenon Czy masz tylko jeden add_header? Jeśli tak, upewnij się, że kod odpowiedzi pochodzi z dokumentacji, patrz nginx.org/r/add_header .
Maxim Dounin
Cześć Maxim, miałem kilka różnych problemów, w końcu mam konfigurację, która działa: stackoverflow.com/a/19135714/443219
Aditya MP
Link do dokumentów nginx wyjaśniających to: nginx.org/en/docs/http/ngx_http_headers_module.html#add_header
siliconrockstar