zoukankan      html  css  js  c++  java
  • Httpd服务入门知识-使用mod_deflate模块压缩页面优化传输速度

             Httpd服务入门知识-使用mod_deflate模块压缩页面优化传输速度

                                                    作者:尹正杰

    版权声明:原创作品,谢绝转载!否则将追究法律责任。

    一.mod_deflate模块概述

    mod_deflate模块功能:
        压缩页面从而优化传输速度
    
    mod_deflate模块适用场景:
      (1)节约带宽,额外消耗CPU;同时,可能有些较老浏览器不支持
      (2)压缩适于压缩的资源,例如文本文件
          LoadModule deflate_module modules/mod_deflate.so SetOutputFilter DEFLATE
          SetOutputFilter DEFLATE
          # Restrict compression to these MIME types
          AddOutputFilterByType DEFLATE text/plain
          AddOutputFilterByType DEFLATE text/html
          AddOutputFilterByType DEFLATE application/xhtml+xml
          AddOutputFilterByType DEFLATE text/xml
          AddOutputFilterByType DEFLATE application/xml
          AddOutputFilterByType DEFLATE application/x-javascript
          AddOutputFilterByType DEFLATE text/javascript
          AddOutputFilterByType DEFLATE text/css
      (3)Level of compression (支持的压缩级别Highest 9 - Lowest 1)
          DeflateCompressionLevel 9
      (4)排除特定旧版本的浏览器,不支持压缩
          Netscape 4.x 只压缩text/html
            BrowserMatch ^Mozilla/4 gzip-only-text/html
          Netscape 4.06-08三个版本 不压缩
            BrowserMatch ^Mozilla/4.0[678] no-gzip
          Internet Explorer标识本身为"Mozilla / 4",但实际上是能够处理请求的压缩。如果用户代理首部匹配字符串“MSIE”(“B”为单词边界”),就关闭之前定义的限制
            BrowserMatch MSI[E] !no-gzip !gzip-only-text/html
     
    博主推荐阅读:
      http://httpd.apache.org/docs/2.4/mod/mod_deflate.html

    二.准备测试数据

    1>.创建测试文件

    [root@node101.yinzhengjie.org.cn ~]# ll -h /var/log/messages
    -rw-r--r-- 1 root root 119K Dec  9 17:10 /var/log/messages
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# touch /var/www/html/asite/log.txt
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# ll -h /var/www/html/asite/log.txt 
    -rw-r--r-- 1 root root 0 Dec  9 17:12 /var/www/html/asite/log.txt
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# for _ in  `seq 1000`; do cat /var/log/messages >> /var/www/html/asite/log.txt;done      #我们将"/var/log/message"内容遍历100次写入到"/var/www/html/asite/log.txt"文件中
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# ll -h /var/www/html/asite/log.txt     #很明显,文件相比"/var/log/message"要打了1000倍。
    -rw-r--r-- 1 root root 117M Dec  9 17:13 /var/www/html/asite/log.txt
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# 

    2>.编写httpd服务端的配置

    [root@node101.yinzhengjie.org.cn ~]# egrep -v "^ *#|^$" /etc/httpd/conf/httpd.conf  
    ServerRoot "/etc/httpd"
    Listen 80
    Include conf.modules.d/*.conf
    User apache
    Group apache
    ServerAdmin root@localhost
    <Directory />
        AllowOverride none
        Require all denied
    </Directory>
    DocumentRoot "/var/www/html"
    <Directory "/var/www">
        AllowOverride None
        Require all granted
    </Directory>
    <Directory "/var/www/html">
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
    </Directory>
    <IfModule dir_module>
        DirectoryIndex index.html
    </IfModule>
    <Files ".ht*">
        Require all denied
    </Files>
    ErrorLog "logs/error_log"
    LogLevel warn
    <IfModule log_config_module>
        LogFormat "%h %l %u %{%Y-%m-%d %H:%M:%S}t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" testlog
        LogFormat "%h %l %u %t "%r" %>s %b" common
        <IfModule logio_module>
          LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i" %I %O" combinedio
        </IfModule>
        CustomLog "logs/access_log" testlog
    </IfModule>
    <IfModule alias_module>
        ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
    </IfModule>
    <Directory "/var/www/cgi-bin">
        AllowOverride None
        Options None
        Require all granted
    </Directory>
    <IfModule mime_module>
        TypesConfig /etc/mime.types
        AddType application/x-compress .Z
        AddType application/x-gzip .gz .tgz
        AddType text/html .shtml
        AddOutputFilter INCLUDES .shtml
    </IfModule>
    AddDefaultCharset UTF-8
    <IfModule mime_magic_module>
        MIMEMagicFile conf/magic
    </IfModule>
    EnableSendfile on
    IncludeOptional conf.d/*.conf
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# egrep -v "^ *#|^$" /etc/httpd/conf/httpd.conf      #查看主配置文件内容
    [root@node101.yinzhengjie.org.cn ~]# egrep -v "^ *#|^$" /etc/httpd/conf/httpd.conf  | grep ServerRoot
    ServerRoot "/etc/httpd"
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# egrep -v "^ *#|^$" /etc/httpd/conf/httpd.conf  | grep IncludeOptional
    IncludeOptional conf.d/*.conf
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# cat /etc/httpd/conf.d/virtualHost.conf 
    <VirtualHost "*:80">
        DocumentRoot "/var/www/html/asite"
        ServerName "www.a.com"        #别忘记在这里写上相应的虚拟主机的名称哟~以下配置类似修改即可。
        <Directory "/var/www/html/asite">
            Require all granted
        </Directory>
        CustomLog "/var/log/httpd/access_asite_log" testlog
    </VirtualHost>
    
    
    <VirtualHost "*:80">
        DocumentRoot "/var/www/html/bsite"
        ServerName "www.b.org"
        <Directory "/var/www/html/bsite">
            Require all granted
        </Directory>
        CustomLog "/var/log/httpd/access_bsite_log" testlog
    </VirtualHost>
    
    
    <VirtualHost "*:80">
        DocumentRoot "/var/www/html/csite"
        ServerName "www.c.net"
        <Directory "/var/www/html/csite">
            Require all granted
        </Directory>
        CustomLog "/var/log/httpd/access_csite_log" testlog
    </VirtualHost>
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# httpd -t
    Syntax OK
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# systemctl reload httpd
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# ss -ntl
    State       Recv-Q Send-Q             Local Address:Port                            Peer Address:Port              
    LISTEN      0      128                            *:80                                         *:*                  
    LISTEN      0      128                            *:22                                         *:*                  
    LISTEN      0      128                           :::22                                        :::*                  
    [root@node101.yinzhengjie.org.cn ~]#

    3>.验证客户端是否可以正常访问"log.txt"

    三.配置虚拟主机压缩案例(生产环境中强烈推荐启用压缩功能,尤其是把大文件上传到CDN节点时,如果你不压缩文件,你就会浪费带宽,而这个带宽成本的浪费实际上是你们公司来买单!)

    1>.编辑httpd服务器的配置文件

    [root@node101.yinzhengjie.org.cn ~]# egrep -v "^ *#|^$" /etc/httpd/conf/httpd.conf  
    ServerRoot "/etc/httpd"
    Listen 80
    Include conf.modules.d/*.conf
    User apache
    Group apache
    ServerAdmin root@localhost
    <Directory />
        AllowOverride none
        Require all denied
    </Directory>
    DocumentRoot "/var/www/html"
    <Directory "/var/www">
        AllowOverride None
        Require all granted
    </Directory>
    <Directory "/var/www/html">
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
    </Directory>
    <IfModule dir_module>
        DirectoryIndex index.html
    </IfModule>
    <Files ".ht*">
        Require all denied
    </Files>
    ErrorLog "logs/error_log"
    LogLevel warn
    <IfModule log_config_module>
        LogFormat "%h %l %u %{%Y-%m-%d %H:%M:%S}t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" testlog
        LogFormat "%h %l %u %t "%r" %>s %b" common
        <IfModule logio_module>
          LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i" %I %O" combinedio
        </IfModule>
        CustomLog "logs/access_log" testlog
    </IfModule>
    <IfModule alias_module>
        ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
    </IfModule>
    <Directory "/var/www/cgi-bin">
        AllowOverride None
        Options None
        Require all granted
    </Directory>
    <IfModule mime_module>
        TypesConfig /etc/mime.types
        AddType application/x-compress .Z
        AddType application/x-gzip .gz .tgz
        AddType text/html .shtml
        AddOutputFilter INCLUDES .shtml
    </IfModule>
    AddDefaultCharset UTF-8
    <IfModule mime_magic_module>
        MIMEMagicFile conf/magic
    </IfModule>
    EnableSendfile on
    IncludeOptional conf.d/*.conf
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# egrep -v "^ *#|^$" /etc/httpd/conf/httpd.conf      #查看主配置文件内容
    [root@node101.yinzhengjie.org.cn ~]# egrep -v "^ *#|^$" /etc/httpd/conf/httpd.conf  | grep ServerRoot
    ServerRoot "/etc/httpd"
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# egrep -v "^ *#|^$" /etc/httpd/conf/httpd.conf  | grep IncludeOptional
    IncludeOptional conf.d/*.conf
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# cat /etc/httpd/conf.d/virtualHost.conf 
    <VirtualHost "*:80">
        DocumentRoot "/var/www/html/asite"
        ServerName "www.a.com"
        <Directory "/var/www/html/asite">
            Require all granted
        </Directory>
        CustomLog "/var/log/httpd/access_asite_log" testlog
        AddOutputFilterByType DEFLATE text/plain      #压缩文本文件(text),以"*.txt"结尾的文本文件,比如"log.txt"
        AddOutputFilterByType DEFLATE text/html       #压缩文本文件(text),以"*.html"结尾的超文本文件,比如"index.html"
        DeflateCompressionLevel 9
    </VirtualHost>
    
    
    <VirtualHost "*:80">
        DocumentRoot "/var/www/html/bsite"
        ServerName "www.b.org"
        <Directory "/var/www/html/bsite">
            Require all granted
        </Directory>
        CustomLog "/var/log/httpd/access_bsite_log" testlog
    </VirtualHost>
    
    
    <VirtualHost "*:80">
        DocumentRoot "/var/www/html/csite"
        ServerName "www.c.net"
        <Directory "/var/www/html/csite">
            Require all granted
        </Directory>
        CustomLog "/var/log/httpd/access_csite_log" testlog
    </VirtualHost>
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# httpd -t
    Syntax OK
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# systemctl reload httpd
    [root@node101.yinzhengjie.org.cn ~]# 

    2>.验证客户端是否支持压缩了

     

     

  • 相关阅读:
    Intent的跳转和传值
    Intent传值的学习
    Activity,Window,View之间是什么关系?
    MATCH_PARENT和FILL_PARENT之间的区别?
    Activity的运行过程
    onCreate和onStart谁的开销大?
    SDKManager连不上墙外的网,列表刷新不出来怎么办?
    AndroidEclipse里的视图里想添加SDK Manager但是找不到怎么办?
    出现“Unable to resolve target 'android-XXX'”怎么处理?
    安卓进程的生命周期
  • 原文地址:https://www.cnblogs.com/yinzhengjie/p/12008383.html
Copyright © 2011-2022 走看看