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

Заголовки Apache 'always set' удаляются, если mod_expires ExpiresActive On

На моем виртуальном хосте есть следующие директивы:

Header always set Strict-Transport-Security "max-age=157700000;"
Header always set ThisIsATestHeader "This is removed when ever ExpiresActive is on"
Header merge AnotherHeader "This will NOT be removed"

Затем я включаю mod_expires с помощью:

ExpiresActive on

В результате все заголовки установлены с always set ушли! Однако объединенный заголовок останется. Это почему? Если это намеренно, как мне поступить с этим в отношении заголовка HSTS, который, как я понимаю, должен присутствовать всегда?

Я нашел решение своей проблемы и половину ответа.

Относительно условного always ведет себя не так, как ожидалось. В конкретном случае фактическое поведение больше похоже на notsuccess. Заголовки установлены с always условные присутствуют, например, при ответах на перенаправление, но не при успехах. Это имеет смысл, поскольку ExpiresActive директива не будет выполняться при перенаправлении.

Почему это происходит, когда mod_expires включен, до сих пор остается загадкой. Eсть комментарий к документации apache об этом же происходит и с обратным прокси.

Чтобы преодолеть это, я придумал решение чтобы добавить заголовок дважды, один для ответа, отличного от 2 **, и один для ответа 2 **. Так что в моем случае это будет:

# For redirects    
Header always set Strict-Transport-Security "max-age=157700000;"
# For success
Header set Strict-Transport-Security "max-age=157700000;"

Теперь он устанавливается для любого запроса в качестве условного always не удалось сделать с включенным mod_expires.