Поддерживаемый способ добавления "IncludeSubdomain" в заголовки STS

Всем привет,

для наших текущих самохостинговых экземпляров Discourse нам необходимо добавить «IncludeSubDomains» в заголовки STS, так как это требование наших внутренних сканеров.

Ранее я добивался этого с помощью некоторых команд sed в app.yml в пользовательских командах после сборки, чтобы обновить /etc/nginx/conf.d/discourse.conf и включить строку 'add_header Strict-Transport-Security “max-age=31536000; includeSubDomains” always;.

А также:

 - replace:
      filename: "/etc/nginx/conf.d/outlets/discourse/20-https.conf"
      from: /add_header Strict-Transport-Security.+/
      to: add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
      global: true

  - replace:
      filename: "/etc/nginx/conf.d/outlets/server/20-https.conf"
      from: /add_header Strict-Transport-Security.+/
      to: add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
      global: true

Ранее это работало. Однако сейчас это перестало работать. Я прочитал, что создание нового файла outlet должно позволить мне добавить это следующим образом:


hooks:
  after_code:
    - file:
        path: /etc/nginx/conf.d/outlets/server/90-hsts.conf
        chmod: 444
        contents: |
          add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

Однако в результате появляются два заголовка STS (один из шаблона SSL и один из моего нового шаблона). Есть ли более хороший способ сделать это, чтобы не получать два заголовка STS? Я думал, что nginx будет учитывать последний добавленный заголовок и игнорировать заголовок из шаблона SSL, который содержит только max-age=31536000; , так что является ли это ошибкой? Спасибо за любую помощь, которую вы можете предоставить.

Решит ли использование set_header вместо add_header проблему?

Я попробую и отчитаюсь :slight_smile:

Если я использую set_header, при перестроении возникает ошибка SSL: сертификат не распознаётся, а при попытке загрузить страницу форума появляется сообщение «connection refused».

Дополнительная информация: мы используем собственный SSL-сертификат.

Эти две ошибки взаимоисключающие…

Извините, в nginx нет set_header — я ошибся, эта команда из другого инструмента.

Самый простой вариант, вероятно, — отредактировать файл templates/web.ssl.template.yml, внедрив туда новые желаемые значения.

Сначала я бы сделал именно это, так как это проще всего. Как только вы разберётесь, следующим по простоте шагом будет копирование этого файла в другое место, чтобы избежать конфликтов с git. Лучшее решение — совместить вашу текущую стратегию с добавлением новой строки для удаления другого конфликтующего параметра.

Спасибо вам обоим за помощь!