Возможно ли на nginx отправить заголовок Strict-Transport-Security даже на страницах, требующих WWW-аутентификации?
Когда у меня есть оба auth_basic
и add_header Strict-Transport-Security "max-age=2592000";
, заголовок HSTS не отправляется:
$ curl -Ik https://****************
HTTP/1.1 401 Unauthorized
Server: nginx/1.4.6 (Ubuntu)
Date: Sun, 14 Sep 2014 17:56:08 GMT
Content-Type: text/html
Content-Length: 203
Connection: keep-alive
WWW-Authenticate: Basic realm="*********"
Это является отправлено на другую страницу, которая не требует аутентификации, поэтому add_header
Директива действует - но не тогда, когда она требует аутентификации.
Возможно, но не с add_header
директива, потому что она ничего не делает в случае ответа 401 Unauthorized.
Описание директивы add_header в ngx_http_headers_module
документация говорит:
Добавляет указанное поле в заголовок ответа при условии, что код ответа равен 200, 201, 204, 206, 301, 302, 303, 304 или 307. Значение может содержать переменные.
Чтобы отправить заголовок HSTS на каждой странице, вам нужно будет скомпилировать nginx с ngx_headers_more модуль (или просто установите nginx-extras
package, если вы используете Debian) и добавьте следующую строку в свой файл конфигурации nginx:
more_set_headers "Strict-Transport-Security: max-age=31536000; includeSubDomains";
Начиная с Nginx 1.7.5, выпущенного 16 сентября 2014 года, это легко сделать, добавив "always
"отметьте свой add_header
директива. Дополнительные модули больше не требуются. :-)
add_header Strict-Transport-Security "max-age=2592000" always;
Как add_header
документация теперь объясняет:
Если
always
указан параметр (1.7.5), поле заголовка будет добавлено независимо от кода ответа.
Из одного из моих собственных веб-приложений (отредактировано):
$ curl -I https://example.com/
HTTP/1.1 401 UNAUTHORIZED
Server: nginx/1.11.3
Date: Wed, 31 Aug 2016 15:37:59 GMT
Content-Type: text/plain; charset=utf-8
Content-Length: 17
Connection: keep-alive
WWW-Authenticate: Basic realm="example"
Strict-Transport-Security: max-age=31536000