directives add_header dans l'emplacement remplaçant les directives add_header dans le serveur


11

En utilisant nginx 1.2.1, je peux ajouter plusieurs en-têtes en utilisant add_headercomme suit:

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

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

Le résultat

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

Cependant, dès que j'utilise la add_headerdirective à l'intérieur location, les autres add_headerdirectives sous serversont ignorées

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

Le résultat

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

La documentation indique que les deux serveret locationsont valides contextet n'indique pas que l'utilisation add_headerdans l'un empêche de l'utiliser dans l'autre.

Q1: Savez-vous s'il s'agit d'un bogue ou du comportement souhaité et pourquoi?

Q2: voyez-vous d'autres options pour résoudre ce problème que d'utiliser le HttpHeadersMoreModulemodule?

Réponses:


18

Il s'agit d'un comportement attendu. Les add_headerdirectives, tout comme toutes les autres directives de type tableau dans nginx, sont héritées du niveau précédent si et seulement si aucune add_headerdirective n'est définie au niveau actuel.

Si vous voulez que nginx ajoute tous les en-têtes dans le location /, vous devez tous les lister location /, c'est- à -dire

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

Si vous avez besoin d'un moyen de répertorier un grand sous-ensemble d'en-têtes en un seul endroit, vous pouvez utiliser la includedirective pour cela. Voir les documents ici .


Je n'ai que l' add_headerintérieur de la locationdirective, mais je ne vois toujours pas cet en-tête ajouté - des idées?
Aditya MP

@adityamenon Vous n'en avez qu'un add_header? Si oui, assurez-vous qu'un code de réponse provient de la documentation, voir nginx.org/r/add_header .
Maxim Dounin

Salut Maxim, j'ai eu quelques problèmes différents, j'ai enfin une configuration qui fonctionne: stackoverflow.com/a/19135714/443219
Aditya MP

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.