目录
一、理论讲解
网页压缩与缓存
在使用 Apache 作为 Web 服务器的过程中,只有对 Apache 服务器进行适当的优化配 置,才能让 Apache 发挥出更好的性能。反过来说,如果 Apache 的配置非常糟糕, Apache 可能无法正常为我们服务。因此,针对各种企业应用需求对 Apache 服务器的配置进行一定 的优化是必不可少的。
网页压缩
网站的访问速度是由多个因素所共同决定的,这些因素包括应用程序的响应速度、网络带宽、服务器性能、与客户端之间的网络传输速度等等。其中最重要的一个因素是 Apache本身的响应速度。因此当为网站性能所苦恼时,第一个需要着手进行处理的便是尽可能的提升 Apache 的执行速度,可以使用网页压缩提升应用程序的速度。更重要的是,它完全不需要任何的成本,只不过是会让服务器 CPU 占用率稍微提升一两个百分点或者更少
gzip介绍
gzip 是一种流行的文件压缩算法,目前应用非常广泛,尤其是在 Linux 平台。当使用gzip 压缩一个纯文本文件时,效果是非常明显的,大约可以减少 70 %以上的文件大小。利用 Apache 中的gzip 模块,可以使用 gzip 压缩算法来对 Apache 服务器发布的网页内容进行压缩后再传输到客户端浏览器。经过压缩后,实际上降低了网络传输的字节数,最明显的好处就是可以加快网页加载的速度。
网页加载速度加快的好处不言而喻。除了节省流量,改善用户的浏览体验外,另一个潜 在的好处是 gzip 与搜索引擎的抓取工具有着更好的关系。
HTTP压缩的过程
Web 服务器接收到浏览器的 HTTP 请求后,检查浏览器是否支持 HTTP 压缩(Accept-Encoding 信息)。如果浏览器支持 HTTP 压缩, Web 服务器检查请求文件的后缀名。如果请求文件是HTML 、 CSS 等静态文件, Web 服务器到压缩缓冲目录中检查是否已经存在请求文件的最新压缩文件。如果请求文件的压缩文件不存在,Web 服务器向浏览器返回未压缩的请求文件,并在压缩缓冲目录中存放请求文件的压缩文件。如果请求文件的最新压缩文件已经存在,则直接返回请求文件的压缩文件。如果请求文件是动态文件,Web服务器动态压缩内容并返回浏览器,压缩内容不存放到压缩缓存目录中。
二、操作
1.mod_deflate压缩模块。
(1) 检查是否安装 mod_deflate 模块。
[root@rhel8_70 ~]# apachectl -t -D DUMP_MODULES 查看全部模组
[root@rhel8_70 ~]# apachectl -t -D DUMP_MODULES | grep "deflate"
(2)重新编译 Apache 添加 mod_deflate 模块
[root@rhel8_70 ~]# cd /usr/src/httpd-2.4.25/
[root@rhel8_70 httpd-2.4.25]# yum -y install zlib-devel
[root@rhel8_70 httpd-2.4.25]# ./configure --prefix=/usr/local/httpd --enable-so --enable-rewrite --enable-charset-lite --enable-cgi --enable-deflate
[root@rhel8_70 httpd-2.4.25]# cd /usr/local/httpd/conf/
[root@rhel8_70 conf]# mv httpd.conf httpd.conf.bak
[root@rhel8_70 conf]# systemctl stop httpd.service
[root@rhel8_70 conf]# cd /usr/src/httpd-2.4.25/
[root@rhel8_70 httpd-2.4.25]# make -j2
[root@rhel8_70 httpd-2.4.25]# make install
(3)配置mod_deflate模块启用
[root@rhel8_70 httpd-2.4.25]# cd /usr/local/httpd/conf/
[root@rhel8_70 conf]# vim httpd.conf
Listen 192.168.112.70: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>
(4)检查安装情况,启动服务。
[root@rhel8_70 conf]# apachectl -t 验证配置文件的配置是否正确
Syntax OK
[root@rhel8_70 conf]# apachectl -t -D DUMP_MODULES | grep " deflate" 检查是否安装成功
deflate_module (shared)
[root@rhel8_70 conf]# systemctl start httpd.service 重启服务
(5)编写测试网页文件。
[root@rhel8_70 ~]# cd /usr/local/httpd/htdocs/
[root@rhel8_70 htdocs]# ls
docker.png index.html
[root@rhel8_70 htdocs]# vim index.html
<html>
<body>
<h1>It works!</h1>
<img src="docker.png"/>
</body>
</html>
[root@rhel8_70 htdocs]# systemctl restart httpd.service
(6)用谷歌浏览器访问,使用F12消息查看
在浏览器中选择“查看元素”可以看到有“AcceptEncoding:gzip”表示压缩已经生效
2.配置mod_expires网页缓存模块
网页缓存
网页缓存是将一部分经常不会改变和变动很少的页面缓存, 下次浏览器再次访问这些页 面时, 不需要再次去下载这些页面 , 从而提高了用户的访问速度。
Apache 的 mod_expires 模 块 会 自 动 生 成 页 面 头 部 信 息 中 的 Expires 标签和Cache-Control 标签,客户端浏览器根据标签决定下次访问是在本地机器的缓存中获取页面,不需要向服务器再次发出请求,从而降低客户端的访问频率和次数,达到减少不必要的
流量和增加访问速度的目的。
配置 mod_expires 模块的步骤与 mod_deflate 模块相似。
(1)检查是否安装mod_expires模块
[root@rhel8_70 htdocs]# apachectl -t -D DUMP_MODULES | grep "expires"
(2)如果没有安装mod_expires模块,重新编译安装Apache添加mod_expires模块
[root@rhel8_70 htdocs]# systemctl stop httpd.service
[root@rhel8_70 htdocs]# cd /usr/local/httpd/conf/
[root@rhel8_70 conf]# mv httpd.conf httpd.conf.bak1
[root@rhel8_70 conf]# yum -y install gcc gcc-c++ pcre pcre-devel zlib-devel
[root@rhel8_70 conf]# cd /usr/src/httpd-2.4.25/
[root@rhel8_70 httpd-2.4.25]# ./configure --prefix=/usr/local/httpd --enable-so --enable-rewrite --enable-charset-lite --enable-cgi --enable-deflate --enable-expires
[root@rhel8_70 httpd-2.4.25]# make -j2
[root@rhel8_70 httpd-2.4.25]# make install
(3)配置mod_expires模块启用
[root@rhel8_70 httpd-2.4.25]# cd /usr/local/httpd/conf/
[root@rhel8_70 conf]# vim httpd.conf
Listen 192.168.112.70:80 52行
LoadModule expires_module modules/mod_expires.so 113行
ServerName www.bdqn.com:80 201行
末行添加
<IfModule mod_expires.c>
ExpiresActive On 打开网页缓存功能
ExpiresDefault "access plus 60 seconds" 设置缓存60秒
</IfModule>
(4)检查安装情况,启动服务
[root@rhel8_70 conf]# apachectl -t
Syntax OK
[root@rhel8_70 conf]# apachectl -t -D DUMP_MODULES | grep "expires"
expires_module (shared)
[root@rhel8_70 conf]# systemctl restart httpd.service
(5)测试缓存是否生效
在Windows系统中依次安装 Microsoft.NET4 和fiddler 软件,打开fiddler 软件 选择 inspectors --->选择 Headers 浏览器访问 http://192.168.8.10 ,双击200消息查看 Expires 项
3.配置Apache隐藏版本信息
隐藏版本信息
一般情况下,软件的漏洞信息和特定版本是相关的。因此,软件的版本号对攻击者来说是很有价值的,在浏览器中选择“查看元素 ” 可以看到 Apache 的版本 2.4.25 。
(1)修改httpd.conf配置文件。
[root@rhel8_70 conf]# cd /usr/local/httpd/conf/
[root@rhel8_70 conf]# vim httpd.conf
Include conf/extra/httpd-default.conf 493行取消注释
(2)修改extra/httpd-default.conf配置文件。
[root@rhel8_70 conf]# vim extra/httpd-default.conf
ServerTokens Prod 55行将原本的Full改为Prod,只显示名称,没有版本
(3)重启httpd服务。
[root@rhel8_70 conf]# systemctl restart httpd.service
(4)浏览器访问 http://192.168.112.70或者http://www.bdqn.com 查看 Server 项
4.配置防盗链
准备两台服务器、一台客户端,且两台服务器上已分别部署完 Apache 服务。
主机 | 操作系统 | 主机软件及版本 |
rhel8_112.70 | RHEL8 | httpd-2.4.25.tar.gz |
rhel8_112.71 | RHEL8 | httpd-2.4.25.tar.gz |
客户端 | Windows 10 | 谷歌浏览器 |
(1)在 Windows 系统中访问 http://192.168.8.10和 http://192.168.8.11,确保 Apache 工作正常
(2)检查是否安装mod_rewrite模块。
[root@rhel8_70 ~]# apachectl -t -D DUMP_MODULES | grep "rewrite"
(3)如果没有安装mod_rewrite模块,重新编译安装 Apache 添加mod_rewrite模块
[root@rhel8_70 ~]# systemctl stop httpd.service
[root@rhel8_70 ~]# cd /usr/local/httpd/conf/
[root@rhel8_70 conf]# mv httpd.conf httpd.conf.bak2
[root@rhel8_70 conf]# yum -y install gcc gcc-c++ pcre pcre-devel zlib-devel
[root@rhel8_70 conf]# cd /usr/src/httpd-2.4.25/
[root@rhel8_70 httpd-2.4.25]# ./configure --prefix=/usr/local/httpd --enable-so --enable-rewrite --enable-charset-lite --enable-cgi --enable-deflate --enable-expires
[root@rhel8_70 httpd-2.4.25]# make -j2
[root@rhel8_70 httpd-2.4.25]# make install
(4)配置mod_rewrite模块启用
[root@rhel8_70 httpd-2.4.25]# cd /usr/local/httpd/conf/
[root@rhel8_70 conf]# vim httpd.conf
LoadModule rewrite_module modules/mod_rewrite.so 159行
ServerName www.bdqn.com:80 201行
Require all granted 在251行下面,添加以下内容
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://bdqn.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://bdqn.com$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.bdqn.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.bdqn.com/$ [NC]
RewriteRule .*\.(gif|jpg|swf)$ http://www.bdqn.com/error.png
</Directory>
- RewriteRule .*\.(gif|jpg|swf)$ http://www.abc.com/error.png 的字段含义:http://www.abc.com/error.png :表示转发到这个路径 。
(5)网页准备。
web源主机配置
[root@rhel8_70 ~]# cd /usr/local/httpd/htdocs/
[root@rhel8_70 htdocs]# ls
docker.png error.png index.html
[root@rhel8_70 htdocs]# vim index.html
<html>
<body>
<h1>www.bdqn.com</h1>
<img src="docker.png"/>
</body>
</html>
盗链网站主机配置
[root@rhel8_71 ~]# cd /usr/local/httpd/htdocs/
[root@rhel8_71 htdocs]# vim index.html
<html>
<body>
<h1>www.accp.com</h1>
<img src="http://192.168.112.70/docker.png"/>
</body>
</html>