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 \bMSI[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>.验证客户端是否支持压缩了

 

 

posted @ 2019-12-08 22:35  尹正杰  阅读(355)  评论(0编辑  收藏  举报