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