将后端压缩到nginx反向代理数据的最佳方式是什么?

我们将运行一个nginx反向代理,它将通过Internet从后端获取数据。

我们的意思是通过互联网的后端机器将不会在前面向反向代理的LAN上。

我们认为在将这些请求通过互联网发送之前,可以很好地处理这些请求。

我看到它的方式应该是这样的:

客户端使用accept-encoding标头或gzip请求内容。

反向代理将其发送到后端服务器。

后端压缩此内容,因为gzip的接受编docker被发送。

请求发送一路上压缩的链。

我们都可以做得很直接。 我的问题是,如果我们在nginx反向代理端启用了gzip压缩,这将如何工作?

Nginx会尝试gzip已经gzip的内容吗?

希望这是有道理的。 谢谢。

更新1:

我了解caching已经(和这个服务)gzipped内容的影响。 我们将修改caching键以包含accept编docker,从而根据用户代理可以接受的内容提供(caching)正确压缩/未压缩的内容。

不,在逆向代理和后端服务器上设置gzip没有问题。 至less我从来没有任何问题。 该代理将识别已经压缩的内容,并简单地交付。

如果你想从后台压缩任何内容,只需添加适当的头文件。

proxy_set_header Accept-Encoding "gzip"; 
  1. http://nginx.org/en/docs/http/ngx_http_gzip_module.html#gzip_http_version – gzip压缩后端响应所需的HTTP请求版本默认为1.1。

  2. http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_http_version – 代理模块默认使用的HTTP请求版本是1.0

这意味着,默认情况下,当代理从后端请求浏览器时,浏览器GET 1.1请求会将其自身转换为GET 1.0请求。 后端需要1.1来执行gzip压缩,所以不会压缩响应。

我的build议是使用proxy_http_version 1.1; 在反向代理上,并在标准的gzip on; 等后端服务器的设置。

还有两件事需要优化。 一个是“gzip_static”(一个额外的模块)的设置。 当对“index.html”提出请求时,该设置会查找并提供“index.html.gz”文件(如果存在)。 这对CPU使用率有积极的影响,因为压缩不是即时执行的。

至于你的问题的其他部分,实际上被压缩的是用gzip_types选项设置的。 默认情况下,只有text / html被压缩。 如果你有gzip文件,你应该小心排除它们。 如果使用*选项(压缩所有内容),那么在发送之前,压缩文件也将使用gzip进行压缩。 这对于大多数图像(jpg,png,gif)来说并不是最佳的,因为它们已经实现了某种LZW压缩层。 因此压缩压缩文件的结果只是在减less甚至增加大小,而使用大量的CPU资源来执行压缩。 您应该根据请求的频率和请求的内容的types(或者它的压缩率)仔细检查要压缩的内容。 就图像而言,使用额外的工具(optipng等)优化它们比开启gzip压缩更有效。