1.掌握Apache网页压缩
(1)网页压缩
- 作用:可以使用网页压缩提升应用程序的速度,而且不需要成本
- gzip:可以使用gzip的压缩算法来对apache服务器发布的网页内容进行压缩后再传输到客户端浏览器。经过压缩后,实际上降低了网络传输的字节数,最明显的好处就是可以加快网页加载的速度。而且使用gzip与搜索引擎的抓取工具有着更好的关系。
- HTTP的压缩过程:Web 服务器接收到浏览器的 HTTP 请求后,检查浏览器是否支持 HTTP压缩(Accept-Encoding 信息)。如果浏览器支持 HTTP 压缩,Web 服务器检查请求文件的后名。如果请求文件是 HTML、CSS 等静态文件,Web 服务器到压缩缓冲目录中检查是否已经存在。请求文件的最新压缩文件。如果请求文件的压缩文件不存在,Web 服务器向浏览器返回未压缩的请求文件,并在压缩缓冲目录中存放请求文件的压缩文件。如果请求文件的最新压缩文件已经存在,则直接返回请求文件的压缩文件。如果请求文件是动态文件,Web服务器动态压缩内容并返回浏览器,压缩内容不存放到压缩缓存目录中。
- Aapache的压缩模块:Apache 2.x内建了mod_deflate这个模块,用以取代mod_gzip。两者都是使用了gzip的压缩算法。一般来说,mod_gzip会比mod_deflate多4%-6%的压缩量,但是mod_gzip对服务器的CPU占用要高一些。简而言之,如果网站访问量较小,想要加快网页的加载速度,就使用 mod_gzip。虽然会额外耗费一些服务器资源,但也是值得的。如果网站访问量较大,并且使用的是共享的虚拟主机,所分配系统资源有限的话,使用mod defate 将会是更好的选择。
Apache 2.4.25 版本中 mod deflate 模块,可使用 DeflateCompressionLevel 指令设置压缩级别。该指令的值可为1(压缩速度最快,最低的压缩质量)至9(最慢的压缩速度,压缩率最高)之间的整数,其默认值为6(压缩速度和压缩质量较为平衡的值)。这个简单的变化更是使得 mod defate 可以轻松媲美 mod gzip 的压缩
安装mod_deflate模块
1.检查是否安装了mod_deflate模块
apachectl -t -D DUMP_MODULES | grep "deflate"
2.重新编译Apache添加mod_deflate
cd httpd.2.4.25
./configure --enable-deflate
make && make install
3.配置mod_deflate模块启用
在hpptd.conf文件,开启mod_deflate.so配置项,在文本末尾添加一下参数
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/css text/xml text/javascript text/jpg text/png
DeflateCompressionLevel 9
SetOutputFilter DEFLATE
</IfModule>
2.利用apxs为http扩展功能
cd /usr/local/httpd/bin
apxs -i -c -a mod_deflate.c 备注:-i 安装 -c 编译指定模块 -a激活模块
配置mod_deflate模块启用
vim /usr/local/httpd/conf/httpd.conf
添加以下代码:
LoadFile /usr/lib64/libz.so
LoadModule deflate_module modules/mod_deflate.so
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/css text/xml text/javascript text/jpg text/png
DeflateCompressionLevel 9
SetOutputFilter DEFLATE
</IfModule>
httpd -t //检查一下语法有无错误
systemctl restart httpd
apachectl -t -D DUMP_MODULES | grep deflate deflate_module
3.测试mod_deflate模块是否生效
访问网站http://192.168.10.101/test1.php
2.掌握Apache网页缓存
1.配置mod_expires模块启用
vim /usr/local/httpd/conf/httpd.conf
LoadModule expires_module modules/mod_expires.so ##去掉前面的注释
<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault "access plus 60 seconds"
</IfModule>
备注:
ExpiresActive On:打开网页缓存功能
ExpiresDefault "access plus 60 seconds" :设置缓存60秒
2.检查httpd.conf语法
httpd -t
3.重启Apache服务
systemctl restart httpd
4.测试mod_expires模块
访问网站http://192.168.10.101/text1.php
3.掌握Apache网页防盗链
1.配置防盗链实验环境
2.新开一台虚拟机
3.修改两台服务器的主机名
(1)服务器1(主机1)
hostnamectl set-hostname apa1
bash
(2)服务器2(主机2)
hostnamectl set-hostname apa2
bash
(3)修改每个主机的host文件‘
192.168.10.101 www.benet.com
192.168.10.102 www.accp.com
(4)编辑带有图片的网页
将图片文logo.jpg件拷贝到apache的网站根目录下并修改网页文件
vim /usr/local/httpd/htdocs/index.html
<html>
<body>
<h1>It work! </h1>
<img src="logo.jpg"/>
</body>
</html>
(5)用另一台apache服务器盗链(盗图网站)
在 www.accp.com 服务器,修改 index.html 文件,加入盗取图片链接
[root@apache2 ~]# vim /usr/local/httpd/htdocs/index.html
<html>
<body>
<h1>dao lian </h1>
<img src="http://www.benet.com/logo.jpg" />
</body>
</html>
(6)客户端测试访问
4.为Apache1防盗链设置
(1)配置mod_rewrite模块启用
vim /usr/local/httpd/conf/httpd.conf
#去掉前面的注释
LoadModule rewrite_module modules/mod_rewrite.so
#修改此网站访问参数
<Directory "/usr/local/httpd/htdocs">
AllowOverride None
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://benet.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://benet.com$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.benet.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.benet.com/$ [NC]
RewriteRule .*\.(gif|jpg|swf)$ http://www.benet.com/error.png
Require all granted
</Directory>
[root@apache1 ~]# systemctl restart httpd
备注:
AllowOverride ALL
通常利用Apache的rewrite模块对 URL 进行重写的时候, rewrite规则会写在 .htaccess 文件里,这时就需要将AllowOverride 的参数设置为ALL。但要使 apache 能够正常的读取.htaccess 文件的内容,就必须对.htaccess 所在目录进行配置。从安全性考虑,根目录的AllowOverride属性一般都配置成不允许任何Override。如果AllowOverride 的参数设置为None,需要将rewrite规则直接写在httpd的主配置文件中。
RewriteCond %{HTTP_REFERER} !^http://www.benet.com/.$ [NC] 的字段含义:
- “%{HTTP REFERER}”:存放一个链接的URL,表示从哪个链接访问所需的网页。
- “!^”: 表示不以后面的字符串开头。
- “ http://www.benet.com” : 是本网站的路径,按整个字符串匹配。
- “.*$” : 表示以任意字符结尾。
- “[NC]”: 表示不区分大小写字母。
RewriteRule .*\.(gif|jpg|swf)$ http://www.benet.com/error.png的字段含义:
- “.”: 表示匹配一个字符。
- “*”:表示匹配0 到多个字符,与“.”合起来的意思是匹配0到多次前面的任意字符,如果是1到多次匹配可以用“+”表示。
- “\.”: 在这里的“\“是转义符,”." 就代表符号“.”的意思。因为“. ”在指令中是属于规则字符,有相应的含义,如果需要匹配,需要在前而加个转义符"\”,其它规则字符如果需要匹配,也做同样处理。
- “(gif|jpg|swf)”: 表示匹配“gif”、“jpg”、“swf"任意一个, “$”表示结束。最后的规则是以“.gif”、 “.jpg”、 ".swf”结尾。
RewriteRule中不要添加png的格式,否则客户端看不到error图片
(2)检测 httpd.conf 语法
apachectl -t
复制 error.png 这个图片到benet站点的工作目录 /usr/local/httpd/htdocs,再次访问网站
5.掌握Apache隐藏版本信息
1.修改主配置文件
vim /usr/local/httpd/conf/httpd.conf
去掉前面的注释符: Include conf/extra/httpd-default.conf
2.修改httpd-default.conf文件
vim /usr/local/httpd/conf/extra/httpd-default.conf
ServerTokens Prod
ServerTokens字段代表显示格式,各种格式如下:
Prod Server:Apache
Major Server:Apache/2
Minor Server:Apache/2.4
OS Server: Apache/2.4.25 (Unix)
Full Server: Apache/2.4.25 (Unix) PHP/4.2.2 MyMod/1.2
3.重启并测试
systemctl restart httpd
查看响应头,Server字段只显示Apache,不再显示版本信息