directivele add_header din locație suprascriu directivele add_header din server (Administrarea sistemului, Ubuntu, Nginx, Http Headers)

Max a intrebat.

Utilizarea nginx 1.2.1 Sunt capabil să adaug mai multe anteturi folosind add_header după cum urmează:

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

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

Rezultatul

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

Cu toate acestea, de îndată ce folosesc add_header în interiorul directivei location, cealaltă add_header directivele de sub server sunt 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";
    }
}

Rezultatul este următorul

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

documentație spune că atât server și location sunt valide context și nu precizează că utilizarea lui add_header în unul dintre ele împiedică utilizarea în celălalt.

Q1: Știți dacă acesta este un bug sau un comportament dorit și de ce?

Q2: Vedeți alte opțiuni pentru a rezolva această problemă decât utilizarea HttpHeadersMoreModule modul?

1 răspunsuri
Maxim Dounin

Acesta este comportamentul așteptat. În acest sens, este necesar să se acceseze add_header directivele, la fel ca toate celelalte directive de tip array din nginx, sunt moștenite de la nivelul anterior dacă și numai dacă nu există niciun add_header directive definite pe nivelul curent.

Dacă doriți ca nginx să adauge toate anteturile din location /, trebuie să le enumerați pe toate în location /, adică

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

Dacă aveți nevoie de o modalitate de a lista un subset mare de anteturi într-un singur loc, puteți utiliza include pentru acest lucru. Consultați documentația aici.

Comentarii

  • Eu am doar add_header în interiorul location directivă, dar tot nu văd acest antet adăugat – vreo idee? –  > Por Aditya M P.
  • @adityamenon Aveți doar un singur add_header? Dacă da, atunci asigurați-vă că un cod de răspuns este unul din documente, vezi nginx.org/r/add_header. –  > Por Maxim Dounin.
  • Bună Maxim, am avut câteva probleme diferite, în cele din urmă am o configurație care funcționează: stackoverflow.com/a/19135714/443219 –  > Por Aditya M P.
  • Link către documentele nginx care explică acest lucru: nginx.org/en/docs/http/ngx_http_headers_module.html#add_header –  > Por siliconrockstar.