Nginx:仅对 https 禁用 gzip 压缩

Nginx:仅对 https 禁用 gzip 压缩

由于 BREACH 漏洞,我想禁用 TLS 流量的 gzip 压缩,但不禁用常规 HTTP 流量的 gzip 压缩。

我可以将每个 Nginxserver部分分成两个独立的 TLS 和非 TLS 部分并在那里配置 gzip,但由于在同一个网络服务器上运行着十几个站点,我不希望对每个服务器部分都这样做。

是否可以禁用所有 HTTPS 请求的 gzip 压缩,而无需创建多个server部分(例如从http部分)?

答案1

SSL 压缩和常规 HTML/gzip 压缩之间存在差异。要防范 BREACH 漏洞,只需禁用前者。请参阅在 nginx SSL 中禁用 deflate 压缩这一页

答案2

不幸的是,我认为最好的答案是将服务器分为 http 和 https。我的网络服务器上有大约十几个网站,每个域有三个服务器块 -https://www为交通服务,其他三个只是向前(http://www.http://、https://)。

一般来说,你不会为了 SEO 而在 http 和 https 上提供相同的内容,至少在没有明确说明哪些内容是典范(即主要的)。

显然,下面的配置仅与这个答案相关,而不是完整的配置。

# 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 上提供相同的网站,并希望减少位置配置等内容的重复,您可以执行类似以下操作。server_name 并进入包含的文件,但这有点不透明。

  # 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;
  }

答案3

尝试这个

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

参考

相关内容