direttive add_header nella posizione che sovrascrive direttive add_header nel server


11

Utilizzando nginx 1.2.1 sono in grado di aggiungere più intestazioni usando add_headercome segue:

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

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

Il risultato

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

Tuttavia, non appena utilizzo la add_headerdirettiva all'interno location, le altre add_headerdirettive sotto serversono ignorate

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

Il risultato

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

La documentazione dice che sia servere locationsono validi contexte non lo fa stato che l'uso add_headerin un'impedisce di utilizzarlo in un altro.

Q1: Sai se si tratta di un bug o del comportamento previsto e perché?

Q2: vedi altre opzioni per risolverlo oltre all'utilizzo del HttpHeadersMoreModulemodulo?

Risposte:


18

Questo è un comportamento previsto. Le add_headerdirettive, proprio come tutte le altre direttive di tipo array in nginx, sono ereditate dal livello precedente se e solo se non ci sono add_headerdirettive definite al livello corrente.

Se vuoi che nginx aggiunga tutte le intestazioni in location /, devi elencarle tutte in location /, ad es

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

Se hai bisogno di un modo per elencare un ampio sottoinsieme di intestazioni in un unico posto, puoi usare la includedirettiva per questo. Vedi i documenti qui .


Ho solo add_headerall'interno della locationdirettiva, ma non vedo ancora questa intestazione aggiunta - qualche idea?
Aditya MP

@adityamenon Ne hai solo uno add_header? Se sì, assicurati che un codice di risposta provenga da un documento, vedi nginx.org/r/add_header .
Maxim Dounin,

Ciao Maxim, ho avuto un paio di problemi diversi, finalmente ho una configurazione che funziona: stackoverflow.com/a/19135714/443219
Aditya MP

Link ai documenti di nginx che spiegano questo: nginx.org/en/docs/http/ngx_http_headers_module.html#add_header
siliconrockstar
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.