加入收藏 | 设为首页 | 会员中心 | 我要投稿 文章分享网_茂名站长网 (https://www.0668zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

gzip压缩传输的几种配置技巧

发布时间:2022-06-14 11:27:42 所属栏目:Linux 来源:互联网
导读:gzip是一种网络数据压缩传输技巧,可以让我们的带宽省70%左右,这可是一个非常可观的东西了,下面我来给大家整理几种gzip配置方法吧. 第一种方案:在.htaccess 中添加如下代码: AddHandler application/x-httpd-php .css .html .js #这是添加你要压缩的类型 php_
  gzip是一种网络数据压缩传输技巧,可以让我们的带宽省70%左右,这可是一个非常可观的东西了,下面我来给大家整理几种gzip配置方法吧.
 
  第一种方案:在.htaccess 中添加如下代码:
 
  AddHandler application/x-httpd-php .css .html .js
   
  #这是添加你要压缩的类型
   
  php_value auto_prepend_file “/home/a4284418/public_html/gzip.php”
   
  #这是你给这些类型增加一个自动运行的php代码,后面一定要填你空间的绝对地址
  gzip.php,代码如下:
 
  <?php
  ob_start(“ob_gzhandler”);
  ob_start(“compress”);
  //如果出现css不能解释,只显示网页,请加入下面的红色代码,去掉注释符
  /*
   
  $pathinfo = pathinfo($_SERVER[PHP_SELF]);
  switch ($pathinfo['extension']) {
  case “css” : header(“Content-type: text/css”);
  break;  //phpfensi.com
  case “html” : header(“Content-type: text/html”);
  break;
  case “js” : header(“Content-type: text/javascript”);
  break;
  default : break;
  }
  */
  ?>
  第二种方案:此种方案是gzip的升级版,可以将gzip的压缩文件缓存下来,避免重复压缩,在.htaccess 中添加:
 
  htaccess RewriteRule (.*.css$|.*.js$) gzip.php?$1 [L],代码如下:
 
  <?php
  // htaccess RewriteRule (.*.css$|.*.js$) gzip.php?$1 [L]
  //项目根路径
  define(‘ABSPATH’, dirname(__FILE__).’/');
  //Gzip压缩开关
  $cache = true;
  //存放gz文件的目录,确保可写
  $cachedir = ‘gzip-cache/’;
  if (!is_dir(ABSPATH.$cachedir))
  {
  mkdir(ABSPATH.$cachedir);
  }
  //判断是否支持gzip
  $gzip = strstr($_SERVER['HTTP_ACCEPT_ENCODING'], ‘gzip’);
  $deflate = strstr($_SERVER['HTTP_ACCEPT_ENCODING'], ‘deflate’);
  //看浏览器是否支持gzip 否则就是 deflate,再就是 none
  $encoding = $gzip ? ‘gzip’ : ($deflate ? ‘deflate’ : ‘none’);
  if(!isset($_SERVER['QUERY_STRING'])) exit();
  //$key=array_shift(explode(‘?’, $_SERVER['QUERY_STRING']));
  //$key=str_replace(‘../’,”,$key);
  $key =basename($_SERVER['QUERY_STRING']);
  //文件的绝对路径
  $filename=ABSPATH.$_SERVER['QUERY_STRING'];
  $symbol=’^';
  $rel_path=str_replace(ABSPATH,”,dirname($filename));
  $namespace=str_replace(‘/’,$symbol,$rel_path);
  $cache_filename=ABSPATH.$cachedir.$namespace.$symbol.basename($filename).’.gz’;//生成gz文件路径
  $type=”Content-type: text/html”; //默认的类型信息
  $pathInfo = pathinfo($filename);
  //根据后缀判断文件类型信息
  $ext = $pathInfo['extension'];
  switch ($ext){
  case ‘css’:
  $type=”Content-type: text/css”;
  break;
  case ‘js’:
  $type=”Content-type: text/javascript”;
  break;
  default:
  exit();
  }
  if($cache)
  {
  if(file_exists($cache_filename))
  {
  //假如存在gz文件
  $mtime = filemtime($cache_filename);
  $gmt_mtime = gmdate(‘D, d M Y H:i:s’, $mtime) . ‘ GMT’;
  //读取gz文件输出
  $content = file_get_contents($cache_filename);
  header(“Last-Modified:” . $gmt_mtime);
  header(“Expires: “);
  header(“Cache-Control: “);
  header(“Pragma: “);
  header($type);
  header(“Tips: Normal Respond (Gzip)”);
  header(“Content-Encoding: gzip”);
  echo $content;
  }else if(file_exists($filename))
  {
  //没有对应的gz文件
  $mtime = mktime();
  $gmt_mtime = gmdate(‘D, d M Y H:i:s’, $mtime) . ‘ GMT’;
  $content = file_get_contents($filename);//读取文件
  $content = gzencode($content, 9, $gzip ? FORCE_GZIP : FORCE_DEFLATE);//压缩文件内容
  header(“Last-Modified:” . $gmt_mtime);
  header(“Expires: “);
  header(“Cache-Control: “);
  header(“Pragma: “);
  header($type);
  header(“Tips: Build Gzip File (Gzip)”);
  header (“Content-Encoding: ” . $encoding);
  header (‘Content-Length: ‘ . strlen($content));
  if ($fp = fopen($cache_filename, ‘w’))
  {
  //写入gz文件,供下次使用
  fwrite($fp, $content);
  fclose($fp);
  }
  echo $content;
   
  }else{
  header(“HTTP/1.0 404 Not Found”);
  }
  }else
  { //处理不使用Gzip模式下的输出。原理基本同上
  if(file_exists($filename))
  {
  $mtime = filemtime($filename);
  $gmt_mtime = gmdate(‘D, d M Y H:i:s’, $mtime) . ‘ GMT’;
  header(“Last-Modified:” . $gmt_mtime);
  header(“Expires: “);
  header(“Cache-Control: “);
  header(“Pragma: “);
  header($type);
  header(“Tips: Normal Respond”);
  $content = readfile($filename);
  echo $content;
  }else
  {
  header(“HTTP/1.0 404 Not Found”);
  }
  }
   
  ?>
  第三种方案:直接修改服务器环境.
 
  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 的默认虚拟主机里加如下代码:
 
  <Location “/”>
  SetOutputFilter DEFLATE
  BrowserMatch ^Mozilla/4 gzip-only-text/html
  BrowserMatch ^Mozilla/4\.0[678] no-gzip
  BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
  SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary
  Header append Vary User-Agent env=!dont-vary
  </Location>
  例子:
 
  <VirtualHost 127.0.0.3>
  DocumentRoot ‘D:/xampp/htdocs/wmt’
  ServerName 127.0.0.3
  DirectoryIndex index.php index.html
  <Directory “D:\xampp\htdocs\wmt”>
  Options Indexes FollowSymLinks Includes ExecCGI
  AllowOverride All
  Order Allow,Deny
  Allow from all
  </Directory>
  <Location “/”>
  SetOutputFilter DEFLATE
  BrowserMatch ^Mozilla/4 gzip-only-text/html
  BrowserMatch ^Mozilla/4\.0[678] no-gzip
  BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
  SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary
  Header append Vary User-Agent env=!dont-vary
  </Location>
  </VirtualHost>
  nginx gzip压缩,nginx 配置gzip段如下:
 
  gzip on;
  gzip_min_length 1k;
  gzip_buffers 16 64k;
  gzip_http_version 1.1;
  gzip_comp_level 6;
  gzip_types text/plain application/x-javascript text/css application/xml;
  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压缩,代码如下:
 
  LoadModule deflate_module modules/mod_deflate.so
  <IfModule mod_deflate.c>
  SetOutputFilter DEFLATE
  DeflateCompressionLevel 9
  AddOutputFilterByType DEFLATE text/html text/css image/gif image/jpeg image/png application/x-javascript
  AddOutputFilterByType DEFLATE application/ms* application/vnd* application/postscript application/javascript
  AddOutputFilterByType DEFLATE application/x-httpd-php application/x-httpd-fastphp
  BrowserMatch ^Mozilla/4 gzip-only-text/html
  BrowserMatch ^Mozilla/4.0[678] no-gzip
  BrowserMatch bMSIE !no-gzip !gzip-only-text/html
  </IfModule>
 

(编辑:文章分享网_茂名站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读