北京SEO

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

2019/10/10/17:46:54  阅读:1988  来源:谷歌SEO算法  标签: SEO工具

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

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

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

gzip.php,代码如下:

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

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

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

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

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

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. SetOutputFilterDEFLATE
  3. BrowserMatch^Mozilla/4gzip-only-text/html
  4. BrowserMatch^Mozilla/4\.0[678]no-gzip
  5. BrowserMatch\bMSIE!no-gzip!gzip-only-text/html
  6. SetEnvIfNoCaseRequest_URI\.(?:gif|jpe?g|png)$no-gzipdont-vary
  7. HeaderappendVaryUser-Agentenv=!dont-vary
  8. </Location>

例子:

  1. <VirtualHost127.0.0.3>
  2. DocumentRoot‘D:/xampp/htdocs/wmt’
  3. ServerName127.0.0.3
  4. DirectoryIndexindex.phpindex.html
  5. <Directory“D:\xampp\htdocs\wmt”>
  6. OptionsIndexesFollowSymLinksIncludesExecCGI
  7. AllowOverrideAll
  8. OrderAllow,Deny
  9. Allowfromall
  10. </Directory>
  11. <Location“/”>
  12. SetOutputFilterDEFLATE
  13. BrowserMatch^Mozilla/4gzip-only-text/html
  14. BrowserMatch^Mozilla/4\.0[678]no-gzip
  15. BrowserMatch\bMSIE!no-gzip!gzip-only-text/html
  16. SetEnvIfNoCaseRequest_URI\.(?:gif|jpe?g|png)$no-gzipdont-vary
  17. HeaderappendVaryUser-Agentenv=!dont-vary
  18. </Location>
  19. </VirtualHost>

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

  1. gzipon;
  2. gzip_min_length1k;
  3. gzip_buffers1664k;
  4. gzip_http_version1.1;
  5. gzip_comp_level6;
  6. gzip_typestext/plainapplication/x-javascripttext/cssapplication/xml;
  7. gzip_varyon;

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. LoadModuledeflate_modulemodules/mod_deflate.so
  2. <IfModulemod_deflate.c>
  3. SetOutputFilterDEFLATE
  4. DeflateCompressionLevel9
  5. AddOutputFilterByTypeDEFLATEtext/htmltext/cssimage/gifimage/jpegimage/pngapplication/x-javascript
  6. AddOutputFilterByTypeDEFLATEapplication/ms*application/vnd*application/postscriptapplication/javascript
  7. AddOutputFilterByTypeDEFLATEapplication/x-httpd-phpapplication/x-httpd-fastphp
  8. BrowserMatch^Mozilla/4gzip-only-text/html
  9. BrowserMatch^Mozilla/4.0[678]no-gzip
  10. BrowserMatchbMSIE!no-gzip!gzip-only-text/html
  11. </IfModule>

广告内容

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

相关阅读

热门评论

爱互踩 爱互踩

爱互踩流量交换~

总篇数175

精选文章

RMAN中catalog和nocatalog区别介绍 小技巧:为Linux下的文件分配多个权限 zimbra8.5.1安装第三方签名ssl证书的步骤 解决mysql不能远程连接数据库方法 windows服务器mysql增量备份批处理数据库 mysql中slow query log慢日志查询分析 JavaScript跨域问题总结 Linux下负载均衡软件LVS配置(VS/DR)教程 mysql中权限参数说明 MYSQL(错误1053)无法正常启动

SEO最新算法