nginx 1.2.1を使用して、次のようにadd_header
を使用して複数のヘッダーを追加できます。
server {
listen 80;
server_name localhost;
root /var/www;
add_header Name1 Value1; <=== HERE
add_header Name2 Value2; <=== HERE
location / {
echo "Nginx localhost site";
}
}
結果
GET /
HTTP/1.1 200 OK
Name1: Value1
Name2: Value2
ただし、location
内でadd_header
ディレクティブを使用するとすぐに、server
の下の他のadd_header
ディレクティブが無視されます
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";
}
}
結果
GET /
HTTP/1.1 200 OK
Name3: Value3
Name4: Value4
documentation は、server
とlocation
の両方が有効なcontext
であり、add_header
を1つで使用すると使用できないと述べていない他の。
Q1:これがバグなのか、それとも意図された動作なのか、そしてその理由を知っていますか?
Q2: HttpHeadersMoreModule
モジュールを使用する以外に、これを修正する他のオプションがありますか?
これは予想される動作です。 add_header
ディレクティブは、nginxの他のすべての配列型ディレクティブと同様に、現在のレベルでadd_header
ディレクティブが定義されていない場合にのみ、前のレベルから継承されます。
Nginxがlocation /
にすべてのヘッダーを追加するようにしたい場合は、それらすべてをlocation /
にリストする必要があります。
location / {
add_header Name1 Value1;
add_header Name2 Value2;
add_header Name3 Value3;
add_header Name4 Value4;
return 200 "";
}
ヘッダーの大きなサブセットを1か所にリストする方法が必要な場合は、include
ディレクティブを使用できます。 docs here を参照してください。