当前位置:首页 > linux教程 > 列表

gzip压缩传输的几种配置方法

发布:smiling 来源: PHP粉丝网  添加日期:2014-10-16 11:27:37 浏览: 评论:0 

gzip是一种网络数据压缩传输技巧,可以让我们的带宽省70%左右,这可是一个非常可观的东西了,下面我来给大家整理几种gzip配置方法吧.

第一种方案:在.htaccess 中添加如下代码:

  1. AddHandler application/x-httpd-php .css .html .js 
  2.  
  3. #这是添加你要压缩的类型 
  4.  
  5. php_value auto_prepend_file “/home/a4284418/public_html/gzip.php” 
  6.  
  7. #这是你给这些类型增加一个自动运行的php代码,后面一定要填你空间的绝对地址 

gzip.php,代码如下:

  1. <?php 
  2. ob_start(“ob_gzhandler”); 
  3. ob_start(“compress”); 
  4. //如果出现css不能解释,只显示网页,请加入下面的红色代码,去掉注释符 
  5. /* 
  6.  
  7. $pathinfo = pathinfo($_SERVER[PHP_SELF]); 
  8. switch ($pathinfo['extension']) { 
  9. case “css” : header(“Content-type: text/css”); 
  10. break;  //phpfensi.com 
  11. case “html” : header(“Content-type: text/html”); 
  12. break; 
  13. case “js” : header(“Content-type: text/javascript”); 
  14. break; 
  15. default : break; 
  16. } 
  17. */ 
  18. ?> 

第二种方案:此种方案是gzip的升级版,可以将gzip的压缩文件缓存下来,避免重复压缩,在.htaccess 中添加:

htaccess RewriteRule (.*.css$|.*.js$) gzip.php?$1 [L],代码如下:

  1. <?php 
  2. // htaccess RewriteRule (.*.css$|.*.js$) gzip.php?$1 [L] 
  3. //项目根路径 
  4. define(‘ABSPATH’, dirname(__FILE__).’/'); 
  5. //Gzip压缩开关 
  6. $cache = true; 
  7. //存放gz文件的目录,确保可写 
  8. $cachedir = ‘gzip-cache/’; 
  9. if (!is_dir(ABSPATH.$cachedir)) 
  10. mkdir(ABSPATH.$cachedir); 
  11. //判断是否支持gzip 
  12. $gzip = strstr($_SERVER['HTTP_ACCEPT_ENCODING'], ‘gzip’); 
  13. $deflate = strstr($_SERVER['HTTP_ACCEPT_ENCODING'], ‘deflate’); 
  14. //看浏览器是否支持gzip 否则就是 deflate,再就是 none 
  15. $encoding = $gzip ? ‘gzip’ : ($deflate ? ‘deflate’ : ‘none’); 
  16. if(!isset($_SERVER['QUERY_STRING'])) exit(); 
  17. //$key=array_shift(explode(‘?’, $_SERVER['QUERY_STRING'])); 
  18. //$key=str_replace(‘../’,”,$key); 
  19. $key =basename($_SERVER['QUERY_STRING']); 
  20. //文件的绝对路径 
  21. $filename=ABSPATH.$_SERVER['QUERY_STRING']; 
  22. $symbol=’^'; 
  23. $rel_path=str_replace(ABSPATH,”,dirname($filename)); 
  24. $namespace=str_replace(‘/’,$symbol,$rel_path); 
  25. $cache_filename=ABSPATH.$cachedir.$namespace.$symbol.basename($filename).’.gz’;//生成gz文件路径 
  26. $type=”Content-type: text/html”; //默认的类型信息 
  27. $pathInfo = pathinfo($filename); 
  28. //根据后缀判断文件类型信息 
  29. $ext = $pathInfo['extension']; 
  30. switch ($ext){ 
  31. case ‘css’: 
  32. $type=”Content-type: text/css”; 
  33. break
  34. case ‘js’: 
  35. $type=”Content-type: text/javascript”; 
  36. break
  37. default
  38. exit(); 
  39. if($cache
  40. if(file_exists($cache_filename)) 
  41. //假如存在gz文件 
  42. $mtime = filemtime($cache_filename); 
  43. $gmt_mtime = gmdate(‘D, d M Y H:i:s’, $mtime) . ‘ GMT’; 
  44. //读取gz文件输出 
  45. $content = file_get_contents($cache_filename); 
  46. header(“Last-Modified:” . $gmt_mtime); 
  47. header(“Expires: “); 
  48. header(“Cache-Control: “); 
  49. header(“Pragma: “); 
  50. header($type); 
  51. header(“Tips: Normal Respond (Gzip)”); 
  52. header(“Content-Encoding: gzip”); 
  53. echo $content
  54. }else if(file_exists($filename)) 
  55. //没有对应的gz文件 
  56. $mtime = mktime(); 
  57. $gmt_mtime = gmdate(‘D, d M Y H:i:s’, $mtime) . ‘ GMT’; 
  58. $content = file_get_contents($filename);//读取文件 
  59. $content = gzencode($content, 9, $gzip ? FORCE_GZIP : FORCE_DEFLATE);//压缩文件内容 
  60. header(“Last-Modified:” . $gmt_mtime); 
  61. header(“Expires: “); 
  62. header(“Cache-Control: “); 
  63. header(“Pragma: “); 
  64. header($type); 
  65. header(“Tips: Build Gzip File (Gzip)”); 
  66. header (“Content-Encoding: ” . $encoding); 
  67. header (‘Content-Length: ‘ . strlen($content)); 
  68. if ($fp = fopen($cache_filename, ‘w’)) 
  69. //写入gz文件,供下次使用 
  70. fwrite($fp$content); 
  71. fclose($fp); 
  72. echo $content
  73.  
  74. }else
  75. header(“HTTP/1.0 404 Not Found”); 
  76. }else 
  77. //处理不使用Gzip模式下的输出。原理基本同上 
  78. if(file_exists($filename)) 
  79. $mtime = filemtime($filename); 
  80. $gmt_mtime = gmdate(‘D, d M Y H:i:s’, $mtime) . ‘ GMT’; 
  81. header(“Last-Modified:” . $gmt_mtime); 
  82. header(“Expires: “); 
  83. header(“Cache-Control: “); 
  84. header(“Pragma: “); 
  85. header($type); 
  86. header(“Tips: Normal Respond”); 
  87. $content = readfile($filename); 
  88. echo $content
  89. }else 
  90. header(“HTTP/1.0 404 Not Found”); 
  91.  
  92. ?> 

第三种方案:直接修改服务器环境.

1,httpd.conf修改

LoadModule headers_module modules/mod_headers.so 开启

LoadModule deflate_module modules/mod_deflate.so 添加

2,Apache2.2\conf\extra\httpd-vhosts.conf 的默认虚拟主机里加如下代码:

  1. <Location “/”> 
  2. SetOutputFilter DEFLATE 
  3. BrowserMatch ^Mozilla/4 gzip-only-text/html 
  4. BrowserMatch ^Mozilla/4\.0[678] no-gzip 
  5. BrowserMatch \bMSIE !no-gzip !gzip-only-text/html 
  6. SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary 
  7. Header append Vary User-Agent env=!dont-vary 
  8. </Location> 

例子:

  1. <VirtualHost 127.0.0.3> 
  2. DocumentRoot ‘D:/xampp/htdocs/wmt’ 
  3. ServerName 127.0.0.3 
  4. DirectoryIndex index.php index.html 
  5. <Directory “D:\xampp\htdocs\wmt”> 
  6. Options Indexes FollowSymLinks Includes ExecCGI 
  7. AllowOverride All 
  8. Order Allow,Deny 
  9. Allow from all 
  10. </Directory> 
  11. <Location “/”> 
  12. SetOutputFilter DEFLATE 
  13. BrowserMatch ^Mozilla/4 gzip-only-text/html 
  14. BrowserMatch ^Mozilla/4\.0[678] no-gzip 
  15. BrowserMatch \bMSIE !no-gzip !gzip-only-text/html 
  16. SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary 
  17. Header append Vary User-Agent env=!dont-vary 
  18. </Location> 
  19. </VirtualHost> 

nginx gzip压缩,nginx 配置gzip段如下:

  1. gzip on
  2. gzip_min_length 1k; 
  3. gzip_buffers 16 64k; 
  4. gzip_http_version 1.1; 
  5. gzip_comp_level 6; 
  6. gzip_types text/plain application/x-javascript text/css application/xml; 
  7. gzip_vary on;  

Nginx的压缩输出有一组gzip压缩指令来实现,相关指令位于http{….}两个大括号之间.

gzip on;:该指令用于开启或关闭gzip模块(on/off)

gzip_min_length 1k;:设置允许压缩的页面最小字节数,页面字节数从header头得content-length中进行获取。默认值是0,不管页面多大都压缩。建议设置成大于1k的字节数,小于1k可能会越压越大。

gzip_buffers 4 16k;:设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流。4 16k代表以16k为单位,安装原始数据大小以16k为单位的4倍申请内存。

gzip_http_version 1.1;:识别http的协议版本(1.0/1.1)

gzip_comp_level 2;:gzip压缩比,1压缩比最小处理速度最快,9压缩比最大但处理速度最慢(传输快但比较消耗cpu)

gzip_types text/plain application/x-javascript text/css application/xml:匹配mime类型进行压缩,无论是否指定,”text/html”类型总是会被压缩的.

gzip_vary on;:和http头有关系,加个vary头,给代理服务器用的,有的浏览器支持压缩,有的不支持,所以避免浪费不支持的也压缩,所以根据客户端的HTTP头来判断,是否需要压缩.

apache gzip压缩,代码如下:

  1. LoadModule deflate_module modules/mod_deflate.so 
  2. <IfModule mod_deflate.c> 
  3. SetOutputFilter DEFLATE 
  4. DeflateCompressionLevel 9 
  5. AddOutputFilterByType DEFLATE text/html text/css image/gif image/jpeg image/png application/x-javascript 
  6. AddOutputFilterByType DEFLATE application/ms* application/vnd* application/postscript application/javascript 
  7. AddOutputFilterByType DEFLATE application/x-httpd-php application/x-httpd-fastphp 
  8. BrowserMatch ^Mozilla/4 gzip-only-text/html 
  9. BrowserMatch ^Mozilla/4.0[678] no-gzip 
  10. BrowserMatch bMSIE !no-gzip !gzip-only-text/html 
  11. </IfModule>

Tags: gzip压缩传输 gzip配置方法

分享到: