Рейтинг:0

Заставить nginx отправлять заголовки HSTS для всех местоположений

флаг bd

У меня довольно сложная конфигурация nginx, в которой множество разных служб выставляют свои конечные точки со множеством разных место расположения{} блоки.

У меня нет большого контроля над всеми этими конфигурациями (поскольку многие команды добавляют свои собственные конфиги), но я хотел бы добавить заголовок HSTS во все ответы от nginx.

Я по наивности добавил

add_header Strict-Transport-Security "max-age=7776000; includeSubDomains" всегда;

в моей конфигурации по умолчанию для всех экземпляров server{}.

Но я страдаю от проблемы, когда последний add_header блокировать выигрывает над моей конфигурацией по умолчанию. Любое место, которое имеет add_header в их конфе будет нет отправить мой заголовок HSTS.

То есть:

[...отрезать...]
сервер {
  слушать 443 ssl;
  предпочтение server_name.{{ домен }}; 
  add_header Strict-Transport-Security "max-age=7776000; includeSubDomains" всегда; # я могу легко добавить это                                               
  error_log /var/log/nginx/preference_error.log;
  access_log /var/log/nginx/preference_access.log основной;


  # / обслуживает передний -> proxy_pass для переднего контейнера
  место расположения / {
    истекает;
    add_header Cache-Control без кеша; # эти две директивы add_header "стирают" мой заголовок hsts
    add_header X-Robots-Tag "noindex, nofollow";

    # заголовки прокси
    настройка хоста proxy_set_header.{{ домен }};
    proxy_set_header X-Forwarded-Proto "https";
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-SSL-CERT $ssl_client_cert;
    proxy_set_header X-Robots-Tag "noindex, nofollow";
    proxy_set_header Обновить $http_upgrade;
    proxy_set_header Соединение "обновление";

    # переход к бэкенду
    proxy_pass http://preference_upstreams/;
  }
}

Есть ли способ заставить ВСЕ серверы/места в nginx добавлять этот заголовок, не добавляя его вручную во все места, где присутствует директива add_header?

флаг sv
Вы запрашиваете решение, которое по умолчанию не поддерживается Nginx.Согласно https://nginx.org/r/add_header ... // Может быть несколько директив add_header. Эти директивы наследуются от предыдущего уровня конфигурации **если и только если** на текущем уровне не определены директивы add_header. // Один из альтернативных способов — https://github.com/openresty/headers-more-nginx-module. Другой способ — https://nginx.org/r/js_header_filter. Удачи.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.