`
nesta2001zhang
  • 浏览: 70802 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

nginx和squid 2.5的gzip压缩问题

 
阅读更多

nginx和squid 2.5的gzip压缩问题

最近发现一个奇怪的问题,对于nginx在后端,squid在前端的架构,squid输出的页面并未进行过压缩。

而将hosts指向nginx机器时,发现页面确实是压缩的。

后来在网上查了很久的资料,上说squid并不能很好的支持http1.1,所以压缩的页面通过它之后就会不压缩了。

又过了两天跟同事提起该事时,他提醒apache2的deflate模块打开时,通过squid输出也是压缩的。

所以又要回头来查找问题了,其中问题的焦点仍然在http1.1和1.0上。

我尝试将apache输出的头和nginx输出的头进行比较,然后一个一个在nginx里头add_header和proxy_hide_header,花了几个小时,调试到最后,问题依旧。

然后我觉得问题出在我提取头时使用了IE浏览器,所以发送的都是http1.1请求,取得的结果和squid访问后端的结果并不是一致的。

我于是又找了台机器,使用curl -0来调试。

此次调试终于发现了问题:

复制内容到剪贴板
代码:
curl --header "Accept-Encoding: gzip, deflate" -D x -0 http://apache

上面的命令输出结果是乱码,证明是压缩的

复制内容到剪贴板
代码:
curl --header "Accept-Encoding: gzip, deflate" -D x -0 http://nginx

上面的命令输出结果是明码,证明是没压缩

终于发现了差别!!!

但是:

复制内容到剪贴板
代码:
curl --header "Accept-Encoding: gzip, deflate" -D x http://nginx

上面这条命令执行后,nginx也能返回压缩结果了

由这些现象可以得出,squid确实是使用的http1.0向后面取数据的,apache居然能支持http1.0下的压缩?貌似http1.0下没有压缩吧。

于是去查了资料,发现http1.0确实是可以压缩的。

那么nginx支不支持1.0的压缩?到nginx.net去查查。

查到gzip_module时,居然给找到了一条完完整整的配置语句:

gzip_http_version

syntax: gzip_http_version 1.0|1.1

default: gzip_http_version 1.1

context: http, server, location

Turns gzip compression on or off depending on the HTTP request version.

When HTTP version 1.0 is used, the Vary: Accept-Encoding header is not set. As this can lead to proxy cache corruption, consider adding it with add_header. Also note that the Content-Length header is not set when using either version. Keepalives will therefore be impossible with version 1.0, while for 1.1 it is handled by chunked transfers.

加到nginx.conf,很好,这时squid是可以返回压缩内容了。

头疼几天的问题,终于得到解决。

复制内容到剪贴板
代码:

修改了nginx.conf文件有关gzip压缩的项,“gzip_http_version 1.1;”改为“gzip_http_version 1.0;”,增加一项“gzip_vary on;”,目的是为了让Nginx前端的Squid 2.5/2.6缓存服务器能够缓存经过gzip压缩的页面。

------------------------------------------------------------------

另:zlib1.2.3安装:
gzip_vary需要设为on,系统需要/usr/lib/zlib.a。

./configure --shared --prefix=/usr
./configure --prefix=/usr

编译两次都安上。

------------------------------------------------------------------

nginx0.7.3版本以下需要加上:

add_header Vary Accept-Encoding;

强制nginx发送vary

否则squid会在得到非压缩版本后认为nginx不支持压缩,然后将缓存的非压缩版本持久不更新,这样会诡异的出现某个链接长期返回非压缩版本的情况,通常是首页。

------------------------------------------------------------------

nginx0.7.3以下的版本强制加上Vary后,会出现缓存几秒钟就过期的诡异现象,所以只能使用0.7.3以上的版本才能解决问题。

分享到:
评论

相关推荐

    阿里云k8s 部署vue2+nginx+springboot2.5+nacos2.0.3

    阿里云k8s 部署vue2+nginx+springboot2.5+nacos2.0.3

    Nginx+Squid负载均衡相关的PPT

    Nginx和Squid是两种常用的开源工具,分别以反向代理和缓存服务著称,它们在构建高性能的负载均衡系统中发挥着关键作用。 **Nginx** Nginx是一款高性能的HTTP和反向代理服务器,以其高效、稳定和轻量级的特性而闻名...

    nginx和squid配合搭建的web服务器

    nginx和squid配合搭建的web服务器

    nginx-1.18.0已开启gzip压缩优化vue项目大小.zip

    在现代Web开发中,优化前端项目以提高加载...Nginx的gzip压缩和Vue CLI的打包过程都是为了提高网站的加载速度,提升用户体验。通过了解这些技术细节,开发者可以更好地优化自己的Web应用,使其在性能上达到最佳状态。

    squid和nginx配置正向代理访问API接口.rar

    总结一下,"squid和nginx配置正向代理访问API接口"涉及的关键知识点包括正向代理的概念、Squid和Nginx的代理功能、配置这两者的步骤、以及安全性控制和优化策略。正确配置和使用这两个工具可以帮助企业构建高效、...

    nginx+squid广州技术沙龙资料2009

    【压缩包子文件的文件名称列表】"530演讲"暗示了可能有一场主题为"530"的演讲,可能详细介绍了如何在实际操作中部署Nginx和Squid,分享了最佳实践和案例研究,涵盖了配置、性能优化、故障排查等方面的知识。...

    docker下nginx配置压缩字体和图片等配置

    总结起来,要在Docker下的Nginx环境中配置字体和图片的GZIP压缩,你需要更新`docker-compose.yml`以设置环境变量,修改`nginx.conf`以启用GZIP和指定压缩的文件类型,以及确保`mime.types`文件包含了所有要处理的...

    Nginx启用压缩及开启gzip 压缩的方法

    gzip压缩需要浏览器和服务器双方都支持,实际上就是服务器端压缩,传到浏览器后浏览器解压并解析。 二、Nginx中gzip的配置 在Nginx中,gzip的配置位于http{….}两个大括号之间。可以使用以下指令来实现gzip压缩: ...

    Nginx部署使用gzip压缩的Unity网页WebGL

    总结来说,"Nginx部署使用gzip压缩的Unity网页WebGL"涉及到的步骤包括Nginx服务器的配置、gzip压缩的启用、Unity的WebGL导出、反向代理的设置以及安全性和性能优化。理解并熟练掌握这些知识点对于高效地发布和运行...

    13-nginx gzip压缩提升网站速度.zip

    总之,通过学习和掌握Nginx的gzip压缩以及相关的性能优化技巧,我们可以有效地提升网站的加载速度,降低服务器的带宽消耗,为用户提供更流畅的浏览体验。同时,Nginx的其他高级特性,如反向代理、负载均衡和安全防护...

    Nginx服务器中使用gzip压缩的相关配置解析

    主要在nginx服务端将页面进行压缩,然后在浏览器端进行解压和解析, 目前大多数流行的浏览器都迟滞gzip格式的压缩,所以不用担心。 默认情况下,Nginx的gzip压缩是关闭的,同时,Nginx默认只对text/html进行压缩 ...

    Nginx启用GZIP压缩网页传输方法(推荐)

    Nginx是一个高性能的HTTP和反向代理服务器,它提供了广泛的功能,包括GZIP压缩,以减少网络数据传输量,提高网页加载速度。GZIP压缩技术通过将网页内容压缩后再发送给客户端,显著减小了数据包的大小,从而提高了...

    docker镜像构建,中间件mysql、lighttpd、Nginx、squid配置和启动、dubbo服务部署

    学习心得,分享出来供大家学习。docker镜像构建,中间件mysql、lighttpd、Nginx、squid配置和启动、dubbo服务部署

    nginx gzip压缩

    **Nginx Gzip压缩详解** Nginx作为一款高性能的HTTP和反向代理服务器,其功能强大且高效。在优化网站性能时,Gzip压缩是必不可少的一项技术,它能够显著减少网页传输的数据量,从而加快页面加载速度,降低服务器...

    nginx系列(十七)nginx下的gzip与vary、预压缩、缓存、反向代理的结合

    例如,可以为特定的URL或路径段设置gzip、Vary、预压缩和缓存策略,或者为不同域名和端口定义不同的反向代理规则。熟练掌握这些配置技巧,能够帮助你构建一个高效、灵活且响应快速的Web服务环境。 总之,Nginx的...

    gzip 压缩 三种方法

    - **文件大小阈值**:对于非常小的文件,压缩可能并不能带来显著的优化,甚至可能因额外的压缩和解压过程而降低效率。因此,可以根据文件大小设定启用gzip的条件。 总结,gzip压缩在PHP环境中通过服务器配置和代码...

    gzip压缩js,csss文件

    在IT行业中,优化网站性能是至关重要的,...在Windows环境下,可以利用CMD和gzip命令进行文件压缩,而在服务器端,需要配置相应的设置以支持gzip压缩。理解并掌握这一技巧,对于提升网站性能和用户体验具有重要意义。

    Nginx启用gzip压缩的方法示例

    `:禁用对IE6及更低版本的gzip压缩,因为这些浏览器存在一些兼容性问题。 除了上述配置外,还可以设置其他参数,例如`gzip_buffers`控制用于压缩的缓冲区大小,`gzip_http_version`指定支持的HTTP协议版本,以及`...

    Nginx服务器中的GZip配置参数详解

    gzip(GUN-ZIP)是一种压缩技术,经过gzip压缩后的页面大小可以变成原来的30%或者更小。 用户浏览页面的时候速度也会更快,gzip的压缩页面需要服务端于浏览器同时支持,服务端压缩传到 浏览器进行解压并解析,现在大多数的...

    Nginx使用Gzip算法对报文进行压缩详解

    Nginx作为一个高性能的HTTP和反向代理服务器,它提供了对Gzip压缩的支持。这篇文章将详细介绍Nginx中如何使用Gzip算法对HTTP报文进行压缩。 首先,我们来解释一下什么是HTTP压缩。HTTP压缩,顾名思义,是一种在HTTP...

Global site tag (gtag.js) - Google Analytics