Apache mod_deflate压缩模块bug解决方法

Linux420阅读模式

Apahce使用mod_deflate压缩模块,客户端(如浏览器)每次都会去服务器取数据(ps:Expires没有过期等情况下),即http请求头的状态码永远为200,而不会访回 304 Not Modified。

304 Not Modified?

如果客户端发送了一个带条件的GET请求且该请求已被允许,而文档的内容(自上次访问以来或者根据请求的条件)并没有改变,则服务器应当返回这个状态码。304响应禁止包含消息体(会节省带宽和开销),因此始终以消息头后的第一个空行结尾。

问题

F5刷新,状态永远200,如下图:

Apache mod_deflate压缩模块bug解决方法-图片1

这是Apahce本身的一个bugApache同时使用gzip压缩和缓存,etag名字会自动变成“******-gzip”,当存在gzip时就会出现问题。

解决方法

如果使用了《OneinStack》和《lnmp一键安装包》(ps:最新下载的已解决这个问题)选择安装了lamp模式,将会自动打开的压缩功能,需要通过如下方法解决此问题:

将文件/usr/local/apache/conf/httpd.conf最后几行将:

  1. ServerTokens ProductOnly
  2. ServerSignature Off
  3. AddOutputFilterByType DEFLATE text/html text/plain text/css text/xml text/javascript
  4. DeflateCompressionLevel 6
  5. SetOutputFilter DEFLATE
  6. Include conf/vhost/*.conf

替换为:

  1. <IfModule mod_headers.c>
  2. AddOutputFilterByType DEFLATE text/html text/plain text/css text/xml text/javascript
  3. <FilesMatch "\.(js|css|html|htm|png|jpg|swf|pdf|shtml|xml|flv|gif|ico|jpeg)$">
  4. RequestHeader edit "If-None-Match" "^(.*)-gzip(.*)$" "$1$2"
  5. Header edit "ETag" "^(.*)-gzip(.*)$" "$1$2"
  6. </FilesMatch>
  7. DeflateCompressionLevel 6
  8. SetOutputFilter DEFLATE
  9. </IfModule>
  10. ServerTokens ProductOnly
  11. ServerSignature Off
  12. Include conf/vhost/*.conf

重启apache:

  1. service httpd restart

测试

Apache mod_deflate压缩模块bug解决方法-图片2

F5刷新:

Mon Jan 18 13:22:06 CST 2016

 
  • 本文由 yeho 发表于 2016-01-18
  • 转载请务必保留本文链接:https://linuxeye.com/438.html
CentOS6.6下安装Redmine2.6(整合Apache2.4) Linux

CentOS6.6下安装Redmine2.6(整合Apache2.4)

Redmine是一个开源的、基于Web的项目管理和缺陷跟踪工具。它用日历和甘特图辅助项目及进度可视化显示。同时它又支持多项目管理。Redmine是一个自由开放源码软件解决方案,它提供集成的项目管理功能...
    • lssin
      lssin

      方便互加情链接吗?

      • ran
        ran

        顶一个

      匿名

      发表评论

      匿名网友
      确定

      拖动滑块以完成验证