技能目标:
4.1 网页压缩与缓存
4.1.1网页压缩
1. gzip介绍
2. HTTP压缩的过程
3.Apache的压缩模块
4. mod_deflate模块
[root@node1 ~]# apachectl -t -D DUMP_MODULES
Loaded Modules:
core_module (static)
so_module (static)
http_module (static)
mpm_worker_module (static)
authn_file_module (shared)
authn_core_module (shared)
authz_host_module (shared)
authz_groupfile_module (shared)
authz_user_module (shared)
authz_core_module (shared)
access_compat_module (shared)
auth_basic_module (shared)
reqtimeout_module (shared)
filter_module (shared)
mime_module (shared)
log_config_module (shared)
env_module (shared)
headers_module (shared)
setenvif_module (shared)
version_module (shared)
unixd_module (shared)
status_module (shared)
autoindex_module (shared)
cgid_module (shared)
dir_module (shared)
alias_module (shared)
[root@node1 ~]#
[root@node1 ~]# apachectl -t -D DUMP_MODULES | grep "deflate"
(1)重新编译 Apache 添加 mod_deflate 模块
[root@node0 ~]# cd /usr/src/httpd-2.4.25/
[root@node0 httpd-2.4.25]# yum install -y zlib-devel
[root@node0 httpd-2.4.25]# ./configure --prefix=/usr/local/httpd --enable-so --enable-rewrite --enable-charset-lite --enable-cgi --enable-deflate
[root@node0 httpd-2.4.25]# cd /usr/local/httpd/conf/
[root@node0 conf]# mv httpd.conf httpd.conf.bak
[root@node0 conf]# systemctl stop httpd.service
[root@node0 conf]# cd /usr/src/httpd-2.4.25/
[root@node0 httpd-2.4.25]# make -j2 && make install
(2)配置mod_deflate模块启用
[root@node0 httpd-2.4.25]# cd /usr/local/httpd/conf/
[root@node0 conf]# ls
extra httpd.conf httpd.conf.bak magic mime.types original
[root@node0 conf]# vim httpd.conf
Listen 192.168.8.10:80 ##52行修改端口号
LoadModule deflate_module modules/mod_deflate.so ##106行取消注释
ServerName www.bdqn.com:80 ##201行修改域名信息
###最后一行开启gzip功能
###设置对什么样的内容进行gzip压缩
###设置压缩级别1-9之间
###启用deflate模块对本站点的输出进行gzip压缩
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/hml text/plain text/css text/xml text/javascrpit text/jpg text/png
DeflateCompressionLevel 9
SetOutputFilter DEFLATE
</IfModule>
(3)检查安装情况,启动服务
###验证配置文件的配置是否正确
[root@node0 conf]# apachectl -t
Syntax OK
###检查 mod_deflate 模块是否已安装
[root@node0 conf]# apachectl -t -D DUMP_MODULES | grep "deflate"
deflate_module (shared)
[root@node0 conf]#
###重启服务
[root@node0 conf]# systemctl start httpd.service
测试缓存是否生效
###编写网页文件
[root@node0 conf]# cd /usr/local/httpd/htdocs/
[root@node0 htdocs]# vim index.html
<html>
<body>
<h1>It works!</h1>
<img src="/opt/web.jpg"/>
</body>
</html>
[root@node0 htdocs]# systemctl restart httpd
(4)浏览器访问,使用F12消息查看

4.1.2 网页缓存
1. 配置 mod_expires 模块启用
(1)检查是否安装mod_expires模块
[root@node0 htdocs]# apachectl -t -D DUMP_MODULES | grep "expires"
如果没有安装mod_expires模块,重新编译安装Apache添加mod_expires模块
[root@node0 ~]# systemctl stop httpd.service
[root@node0 ~]# cd /usr/local/httpd/conf/
[root@node0 conf]# ls
extra httpd.conf httpd.conf.bak magic mime.types original
[root@node0 conf]# mv httpd.conf httpd.conf.bak1
[root@node0 conf]# yum -y install gcc gcc-c++ pcre pcre-devel zlib-devel
[root@node0 httpd-2.4.25]# ./configure --prefix=/usr/local/httpd --enable-so --enable-rewrite --enable-charset-lite --enable-cgi --enable-deflate --enable-expires
[root@node0 httpd-2.4.25]# make -j2 && make install
(2)配置mod_expires模块启用
[root@node0 httpd-2.4.25]# cd /usr/local/httpd/conf/
[root@node0 conf]# ls
extra httpd.conf httpd.conf.bak httpd.conf.bak1 magic mime.types original
[root@node0 conf]# vim httpd.conf
###52行
Listen 192.168.8.10:80
###113行
LoadModule expires_module modules/mod_expires.so
###201行
ServerName www.bdqn.com:80
###--末行添加-
<IfModule mod_expires.c>
###打开网页缓存功能
ExpiresActive On
###设置缓存60秒
ExpiresDefault "access plus 60 seconds"
</IfModule>
(3)检查安装情况,启动服务
###验证配置文件的配置是否正确
[root@node0 conf]# apachectl -t
Syntax OK
###检查 mod_deflate 模块是否已安装
[root@node0 conf]# apachectl -t -D DUMP_MODULES | grep "expires"
expires_module (shared)
###启动httpd服务
[root@node0 conf]# systemctl restart httpd
(4)测试缓存是否生效

4.2 隐藏版本信息
4.2.1 配置Apache隐藏版本信息
[root@node0 ~]# cd /usr/local/httpd/conf/
[root@node0 conf]# vim httpd.conf
###493行取消注释
Include conf/extra/httpd-default.conf
###修改extra/httpd-default.conf配置文件
[root@node0 conf]# vim extra/httpd-default.conf
###55行将原本的 Full 改为 Prod,只显示名称,没有版本
ServerTokens Prod
###重启httpd服务
[root@node0 conf]# systemctl restart httpd
ServerTokens表示 Server回送给客户端的响应头域是否包含关于服务器OS类型和编译过的模块描述信息
浏览器访问 http://192.168.8.10或者http://www.bdqn.com 查看 Server 项

4.1.2 Apache防盗链
- 可以追溯上一个入站地址是什么。
- 对于资源文件,可以跟踪到包含显示它的网页地址是什么,因此所有防盗链方法都是基 于这个 Referer 字段。
1. 配置防盗链
主机 | 操作系统 | 主机软件及版本 |
node1_192.168.8.10(源主机)bdqn.com | CentOS 7.6 |
httpd-2.4.25.tar.gz
|
node2_192.168.8.11(盗链网站)accp.com | CentOS 7.6 | httpd-2.4.25.tar.gz |
客户端 | Windows 10 | 谷歌浏览器 |
(1)在 Windows 系统中访问 http://192.168.8.10和 http://192.168.8.11,确保 Apache 工作正常, 如图 4.5 所示。


2. 检查是否安装mod_rewrite模块
[root@node0 ~]# apachectl -t -D DUMP_MODULES | grep "rewrite"
如果没有安装mod_rewrite模块,重新编译安装 Apache 添加mod_rewrite模块
[root@node0 ~]# systemctl stop httpd.service
[root@node0 ~]#
[root@node0 ~]# cd /usr/local/httpd/conf/
[root@node0 conf]#
[root@node0 conf]# mv httpd.conf httpd.conf.bak2
[root@node0 conf]# yum -y install gcc gcc-c++ pcre pcre-devel zlib-devel
[root@node0 conf]# cd /usr/src/httpd-2.4.25/
[root@node0 httpd-2.4.25]# ./configure --prefix=/usr/local/httpd --enable-so --enable-rewrite --enable-charset-lite --enable-cgi --enable-deflate --enable-expires
[root@node0 httpd-2.4.25]#
[root@node0 httpd-2.4.25]# make -j2 && make install
配置mod_rewrite模块启用
[root@node0 httpd-2.4.25]# cd /usr/local/httpd/conf/
[root@node0 conf]# vim httpd.conf
###159行
LoadModule rewrite_module modules/mod_rewrite.so
226 <Directory "/usr/local/httpd/htdocs">
227 #
228 # Possible values for the Options directive are "None", "All",
229 # or any combination of:
230 # Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
231 #
232 # Note that "MultiViews" must be named *explicitly* --- "Options All"
233 # doesn't give it to you.
234 #
235 # The Options directive is both complicated and important. Please see
236 # http://httpd.apache.org/docs/2.4/mod/core.html#options
237 # for more information.
238 #
239 Options Indexes FollowSymLinks
240
241 #
242 # AllowOverride controls what directives may be placed in .htaccess files.
243 # It can be "All", "None", or any combination of the keywords:
244 # AllowOverride FileInfo AuthConfig Limit
245 #
246 AllowOverride None
247
248 #
249 # Controls who can get stuff from this server.
250 #
251 Require all granted
252 RewriteEngine On
253 RewriteCond %{HTTP_REFERER} !^http://bdqn.com/.*$ [NC]
254 RewriteCond %{HTTP_REFERER} !^http://bdqn.com$ [NC]
255 RewriteCond %{HTTP_REFERER} !^http://www.bdqn.com/.*$ [NC]
256 RewriteCond %{HTTP_REFERER} !^http://www.bdqn.com/$ [NC]
257 RewriteRule .*\.(gif|jpg|swf)$ http://www.bdqn.com/error.png
258 </Directory>
RewriteCond %{HTTP_REFERER} !^http://www.abc.com/.*$ [NC] 的字段含义:
%{HTTP_REFERER} :存放一个链接的 URL,表示从哪个链接中转访问目录下的静态资源。
!^”:表示不以后面的字符串开头。
http://www.abc.com”:是本网站的路径,按整个字符串匹配。
.*$”:表示以任意字符结尾。
[NC] :表示不区分大小写字母。
RewriteRule .*\.(gif|jpg|swf)$ http://www.abc.com/error.png 的字段含义:
. :表示匹配一个字符。
*”:表示匹配 0 到多个字符,与.合起来的意思是匹配 0 到多次前面的任意字符,如果是 1 到多次匹配可以用+表示。
“\.”:在这里的\是转义符,\.就代表符号.的意思。因为.在指令中是属于规则字符,有相应的含义, 如果需要匹配,需要在前面加个转义符\,其它规则字符如果需要匹配,也做同样处理。
(gif|jpg|swf)$ :表示匹配gif、jpg、swf任意一个,$表示结束。最后的规则是以.gif、.jpg、.swf结尾, 前面是1到多个字符的字符串,也就是匹配图片类型的文件。
http://www.abc.com/error.png :表示转发到这个路径 。
整个配置的含义是 使用本网站以外的网站域名 访问本站的图片文件时,显示error.png 这个图片。
3. 网页准备
[root@node0 htdocs]# cd /usr/local/httpd/htdocs/
[root@node0 htdocs]# ls
error.png index.html web.jpg
[root@node0 htdocs]# vim index.html
<html>
<body>
<h1>www.bdqn.com</h1>
<img src="web.jpg"/>
</body>
</html>
盗链网站主机配置
[root@node1 ~]# cd /usr/local/httpd/htdocs/
[root@node1 htdocs]# vim index.html
<html>
<body>
<h1>www.accp.com</h1>
<img src="http://192.168.8.10/web.jpg"/>
</body>
</html>
在盗图网站主机上进行浏览器验证
