Назад | Перейти на главную страницу

Как избежать дублирования директив add_header в nginx?

В документации сказано следующее:

Эти директивы наследуются от предыдущего уровня тогда и только тогда, когда на текущем уровне не определены директивы add_header.

Моя проблема в том, что у меня несколько location блоки, которые я хочу кэшировать, например этот:

add_header X-Frame-Options SAMEORIGIN;
add_header Strict-Transport-Security "max-age=31536000; includeSubdomains;";

location ~ ^/img/(.*)\.(png|jpg|jpeg|gif|bmp)$ {
    expires 1w;
    add_header Cache-Control public;
}

Но это заставит меня потерять все заголовки, объявленные вне блока. Таким образом, очевидно, единственный способ - дублировать эти заголовки в каждом блоке местоположения, например:

add_header X-Frame-Options SAMEORIGIN;
add_header Strict-Transport-Security "max-age=31536000; includeSubdomains;";

location ~ ^/img/(.*)\.(png|jpg|jpeg|gif|bmp)$ {
    expires 1w;
    add_header Cache-Control public;
    add_header X-Frame-Options SAMEORIGIN;
    add_header Strict-Transport-Security "max-age=31536000; includeSubdomains;";
}

Не кажется правильным. Любые идеи?

Вам нужен модуль ngx_headers_more: https://www.nginx.com/resources/wiki/modules/headers_more/

И да, поведение add_header действительно раздражает :)