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

Nginx: отключить сжатие gzip только для https

Из-за уязвимости 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;
  }

Попробуй это

if ($scheme = https) {
    gzip off;
}

Ссылка