由于 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;
}