9 votos

directivas add_header en lugar de sobrescribir las directivas add_header en servidor

Usando nginx 1.2.1 soy capaz de agregar varios encabezados utilizando add_header como sigue:

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

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

El resultado

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

Sin embargo, pronto empecé como puedo usar el add_header directiva dentro de location, el otro add_header directivas server son ignorados

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

El resultado

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

La documentación dice que tanto server y location son válidos context y no del estado que el uso de add_header en uno evita que se utilice en el otro.

Q1: ¿sabes si esto es un bug o el comportamiento previsto y por qué?

P2: ¿a ver otras opciones a conseguir este fijo que el uso de la HttpHeadersMoreModule módulo?

4voto

Maxim Dounin Puntos 1096

Este es el comportamiento esperado. El add_header directivas, tanto como todos los otros de la matriz de tipo directivas en nginx, son heredadas desde el nivel anterior si y sólo si no hay ningún add_header directivas definidas en el nivel actual.

Si desea nginx para agregar todos los encabezados en la location /, tiene lista de todos ellos en location /, es decir,

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

Si usted necesita una manera de lista de grandes subconjunto de los encabezados en un solo lugar, usted puede usar include directiva para esto. Ver docs aquí.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: