Из-за уязвимости BREACH я бы хотел отключить сжатие gzip для TLS-трафика, но не для обычного HTTP-трафика.
Я мог бы разделить каждый Nginx server
раздел на два отдельных раздела TLS и не TLS и настройте там gzip, но с десятком сайтов, работающих на одном веб-сервере, я бы предпочел не делать это для каждого раздела сервера.
Можно ли отключить сжатие gzip для всех запросов HTTPS без создания нескольких server
разделы (например, из http
раздел)?
Есть разница между сжатием SSL и обычным сжатием HTML / gzip. Для защиты от уязвимости BREACH следует отключить только первую. Видеть Отключить сжатие deflate в nginx SSL и эта страница.
К сожалению, я думаю, что лучший ответ - разделить ваши серверы на http и https. У меня около десятка сайтов на моем веб-сервере, у меня есть три серверных блока на домен - https: // www обслуживает трафик, остальные три просто вперед (http: // www. http: //, https: //).
Как правило, вы не хотите показывать один и тот же контент на http и https для SEO, по крайней мере, не указав, какой контент канонический (т.е. первичный).
Очевидно, что приведенная ниже конфигурация имеет отношение только к этому ответу, а не к полной конфигурации.
# Main Nginx config file
http {
gzip on;
# https site, usually in a file with any other servers for this domain
server {
server_name www.example.com;
listen 443 ssl http2;
gzip off;
}
# http site that forwards to https
server {
server_name www.example.com example.com;
listen 80;
server_name example.com www.example.com;
access_log /var/log/nginx/access.log;
return 301 https://www.example.com$request_uri;
}
# https / non www server skipped as it's obvious
}
Уменьшение дублирования
Если вы действительно хотите обслуживать один и тот же веб-сайт по http и https, и хотите уменьшить дублирование таких вещей, как конфигурации вашего местоположения, вы можете сделать что-то вроде этого. Имя_сервера и перейдите во включенный файл, но это немного непрозрачно.
# https site, usually in a file with any other servers for this domain
server {
server_name www.example.com;
listen 443 ssl http2;
gzip off;
# include the locations, which is common to http and https
include /etc/nginx/sites-enabled/example_com_location.conf;
}
# http site that forwards to https
server {
server_name www.example.com example.com;
listen 80;
server_name example.com www.example.com;
include /etc/nginx/sites-enabled/example_com_location.conf;
}