С помощью 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
Однако, как только я использую add_header
директива внутри location
, другой add_header
директивы под server
игнорируются
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
В документация говорит, что оба server
и location
действительны context
и не утверждает, что использование add_header
в одном не позволяет использовать его в другом.
В1: знаете ли вы, является ли это ошибкой или предполагаемым поведением и почему?
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 "";
}
Если вам нужен способ перечислить большое подмножество заголовков в одном месте, вы можете использовать include
директива для этого. См. Документы Вот.