Apache网页与安全优化(网页压缩、网页缓存、隐藏版本信息、网页图片防盗链)
Apache网页与安全优化
一、Apache网页优化
- Apache网页优化概述
在企业中,部署Apache后只采用默认的配置参数,会引发网站很多问题,换言之默认配置是针对以前较低的服务器配置的,以前的配置已经不适用当今互联网时代。
为了适应企业需求,就需要考虑如何提升Apache的性能与稳定性,这就是Apache优化的内容 - 优化内容
1、配置网页压缩功能
2、配置网页缓存
3、工作模式的选择与参数优化
4、配置隐藏版本号
5、配置防盗链
1.1、网页压缩
1.1.1、gzip介绍
- 配置Apache的网页压缩功能,是使用gzip压缩算法来对网页内容进行压缩后再传输到客户端浏览器
- 作用
1、降低了网络传输的字节数,加快网页加载的速度
2、节省流量,改善用户的浏览体验
3、gzip与搜索引擎的抓取工具有着更好的关系
1.1.2、Apache的压缩模块
-
压缩模块概述
Apache 1.x系列没有内建网页压缩技术,使用的是额外的第三方mod gzip模块来执行压缩。而Apache 2.x官方在开发的时候,就把网页压缩考虑进去,内建了mod deflate这个模块,用以取代mod-gzip,两者都是使用的gzip压缩算法,它们的运作原理是类似的。mod deflate压缩速度略快而mod gzip的压缩比略高。一般默认情况下, mod gzip会比mod deflate多出4%~6%的压缩量。
一般来说mod gzip对服务器CPU的占用要高一些。mod deflate是专门为确保服务器的性能而使用的一个压缩模块, moddeflate需要较少的资源来压缩文件。这意味着在高流量的服务器,使用mod deflate可能会比mod gzip加载速度更快。
简而言之,如果网站访问量较小,想要加快网页的加载速度,就使用mod gzip.虽然会额外耗费一些服务器资源,但也是值得的。如果网站访问量较大、使用的是共享虚拟主机.且所分配系统资源有限,那么使用mod deflate将会是更好的选择。
另外,从Apache 2.0.45开始, mod deflate模块可使用DeflateCompressionLevel指令来设置压缩级别。该指令的值可为1至(压缩速度最快,最低的压缩质量) 9 (最慢的压缩速度,压缩率最高)之间的整数,其默认值为6 (压缩速度和压缩质量较为平衡的值)这个简单的变化更是使得mod deflate可以轻松媲美mod-gzip的压缩。 -
Apache实现网页压缩的功能模块包括
1、mod_gzip模块
2、mod_deflate模块
Apache 1.x
没有内建网页压缩技术,但可使用第三方mod_gzip模块执行压缩
Apache 2.x
在开发的时候,内建了mod_deflate这个模块,取代mod gzip -
mod_gzip模块与mod_deflate模块
1、两者均使用gzip压缩算法,运作原理类似
2、mod_deflate压缩速度略快,而mod_gzip的压缩比略高
3、mod_gzip对服务器CPU的占用要高一些
4、高流量的服务器,使用mod_deflate可能会比mod_gzip 加载速度更快
1.1.3、Apache的压缩实验
1编译安装httpd,安装环境多一个zlib-devel否则会报错或者压缩模块装不上去,configure配置多一个–enable-deflate(压缩模块)
[aaa@qq.com ~]# tar zxf apr-1.6.2.tar.gz
[aaa@qq.com ~]# tar zxf apr-util-1.6.0.tar.gz
[aaa@qq.com ~]# tar jxf httpd-2.4.29.tar.bz2
[aaa@qq.com ~]# mv apr-1.6.2 httpd-2.4.29/srclib/apr
[aaa@qq.com ~]# mv apr-util-1.6.0 httpd-2.4.29/srclib/apr-util
[aaa@qq.com ~]# yum -y install gcc gcc-c++ make pcre-devel expat-devel perl zlib-devel
[aaa@qq.com ~]# cd httpd-2.4.29/
[aaa@qq.com ~]# ./configure --prefix=/usr/local/httpd --enable-so --enable-rewrite --enable-charset-lite --enable-cgi --enable-deflate
[aaa@qq.com ~]# make && make install
prefix:指定将 httpd 服务程序安装到哪个目录下,如/usr/local/httpd
--enable-so:启用动态加载模块支持,使 httpd 具备进一步扩展功能的能力。
--enable-rewrite:启用网页地址重写功能,用于网站优化及目录迁移维护。
--enable-charset-lite:启动字符集支持,以便支持使用各种字符集编码的网
--enable-cgi:启用 CGI 脚本程序支持,便于扩展网站的应用访问能力。
2 .Apache主配置文件中开启expires模块
[aaa@qq.com ~]# vi /usr/local/httpd/conf/httpd.conf
#64行 LoadMole foo_module modules/mod_foo.so
3 .Apache主配置文件末尾添加模块网页数据
[aaa@qq.com ~]# vi /usr/local/httpd/conf/httpd.conf
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/css text/xml text/javascript image/jpg
DeflateCompressionLevel 9
SetOutputFilter DEFLATE
</IfModule>
第一行代表对什么样的内容启用gzip压缩,
第二行代表压缩级别
第三行代表启用deflate 模块对本站点的输出进行 gzip 压缩。
4 检查语法是否有错以及模块是否开启
httpd -t
Syntax OK ###语法正确
apachectl -t -D DUMP_MODULES | grep "deflate"
deflate_module (shared) ###deflate模块开启
5、编辑主页
[aaa@qq.com ~]# vi /usr/local/httpd/htdocs/index.html
<html><body><h1>this is web!</h1><img src=a.jpg / ></body></html>
6.在客户端中用浏览器访问,用抓包软件查看
1.2、网页缓存
1.2.1、网页缓存概述
网页缓存是将一部分经常不会改变和变动很少的页面缓存,下次浏览器再次访问这些
页面时,不需要再次去下载这些页面,从而提高了用户的访问速度。
Apache的mod expires模块会自动生成页面头部信息中的Expres标签和Cache-Control
标签,客户端浏览器根据标签决定下次访问是在本地机器的缓存中获取页面,不需要向服务器
再次发出请求,从而降低客户端的访问频率和次数,达到减少不必要的流量和增加访问速度的目的。
1.2.2、配置网页的缓存时间
- 通过mod_expire模块配置Apache,使网页能在客户端浏览器缓存一段时间闻,以避免重复请求
- 启用mod_expire模块后,会自动生成页面头部信息中的Expires标签和Cache-Control标签,从而降低客户端的访问频率和次数,达到减少不必要的流量和增加访问速度的目的
- 查看是否安装了mod_expire模块
1、/usr/local/apache/bin/apachectl -t-D DUMP_MODULES
2、如果输出中没有expires_module (static),则说明编译时没有安装mod_expires
如果没有安装,需要重新编译安装
1.关闭Apache服务并增加expires模块
[aaa@qq.com ~]# systemctl stop httpd
[aaa@qq.com ~]# cd httpd-2.4.2/
[aaa@qq.com httpd-2.4.2]# ./configure \
> --enable-so \
> --enable-rewrite \
> --enable-cgi \
> --enable-cgid \
> --enable-charset-lite \
> --enable-deflate \
> --enable-expires
[aaa@qq.com httpd-2.4.2]# make && make install
在配置文件中开启相关功能添加相关功能
2、启用mod_expires模块,并设置http协议下任意格式的文档均30秒后过期
[aaa@qq.com ~]# vi /usr/local/httpd/conf/httpd.conf
## 64行 LoadModule expires_module modules/mod_expires.so
<lfModule mod_expires.c> ###文章末尾添加
ExpiresActive On
ExpiresDefault "access plus 30 seconds"
</lfModule>
3.检测httpd.conf 语法并启动服务
[aaa@qq.com ~]# httpd -t
Syntax OK
[aaa@qq.com ~]# systemctl start httpd
[aaa@qq.com ~]# apachectl -D DUMP_MODULES | grep expires
expires_module (shared)
- 抓包验证
二、Apache安全优化
Apache的默认配置除了性能可以优化外,还需要对安全性进行相应的配置。
默认配置能保证服务器正常提供服务,但Apache作为一个软件,必然也会存在一些漏洞,
尽可能的降低潜在的风险,是管理员必须掌握的内容。
2.1、隐藏版本信息
一般情况下,软件的漏洞信息和特定版本是相关的。因此,软件的版本号对攻击者来说是很有价值的
Apache的版本信息,透露了一定的漏洞信息,从而给网站带来安全隐患生产环境中要配置Apache隐藏版本信息
■#Include conf/extra/httpd-default.conf
修改httpd-default.conf文件
■ServerTokens Full修改为ServerTokens Prod
重启httpd服务,访问验证
2.1.1、配置Apache隐藏版本信息``
1‘将主配置文件httpd.conf以下行注释去掉
[aaa@qq.com ~]# vi /usr/local/httpd/conf/httpd.conf
##470行 include conf/extra/httpd-default.conf
- 修改httpd-default.conf文件
[aaa@qq.com ~]# vi /usr/local/httpd/conf/extra/httpd-default.conf
## 55行 ServerTokens Full修改为ServerTokens Prod
[aaa@qq.com ~]# systemctl start httpd
3 .验证
2.2、配置防盗链
一般来说,我们浏览一个完整的页面并不是一次性全部传送到客户端的。如果所请求的页面带有图片或其他信息,那么第一个Http请求传送的是这个页面的文本,然后通过客户端的浏览器对这段文本进行解释执行,如果发现其中还有图片,那么客户端的浏览器会再次发送一条Http请求,当这个请求被处理后这个图片文件才会被
传送到客户端,最后浏览器会将图片安放到页面的正确位置,就这样一个完整的页面要经过多次发送Http请求才能够被完整的显示
基于这样的机制,就会产生盗链问题:如果一个网站中没有其页面中所说图片信息,那么它完全可以链接到其他网站的图片信息上。这样,没有任何资源的网站利用了别的网站的资源来展示给浏览者,提高了自己的访问量,而大部分浏览者又不会很容易
地发现。一些不良网站为了不增加成本而扩充自己站点内容,经常盗用其他网站的链接。一方面损害了原网站的合法利益,另一方面又加重了服务器的负担。
2.2.1、配置防盗链实验
1 实验环境
IP地址 | 域名 | 用途 |
---|---|---|
20.0.0.10 | www.test.com | 源主机 |
20.0.0.11 | 未设置 | 盗链主机 |
客户端 | Win10 | ie浏览器(测试) |
1 .编译安装Apache并优化(源主机)
[aaa@qq.com ~]# tar zxf apr-1.6.2.tar.gz
[aaa@qq.com ~]# tar zxf apr-util-1.6.0.tar.gz
[aaa@qq.com ~]# tar jxf httpd-2.4.29.tar.bz2
[aaa@qq.com ~]# mv apr-1.6.2 httpd-2.4.29/srclib/apr
[aaa@qq.com ~]# mv apr-util-1.6.0 httpd-2.4.29/srclib/apr-util
[aaa@qq.com ~]# yum -y install gcc gcc-c++ make pcre-devel expat-devel perl zlib-devel
[aaa@qq.com ~]# cd httpd-2.4.29/
[aaa@qq.com ~]# ./configure --prefix=/usr/local/httpd --enable-so --enable-rewrite --enable-charset-lite --enable-cgi --enable-deflate
[aaa@qq.com ~]# make && make install
2 .编辑主页
[aaa@qq.com ~]# vi /usr/local/httpd/htdocs/index.html
<html><body><h1>this is web!</h1><img src=a.jpg / ></body></html>
3.添加源主机域名,真机也要
[aaa@qq.com ~]# vi /usr/local/httpd/conf/httpd.conf
ServerName www.test.com:80 ### 把#号去掉,并改成自己的域名
AddDefaultCharset utf-8 ### 加在上面代码下面就行,解决中文乱码!
==>> wq 保存
[aaa@qq.com ~]# systemctl restart httpd
3 .测试一下,打开盗图网站
3、盗链网站使用yum一键式安装apache,并且在盗链网站的测试网页,盗用源主机网站目录下的一个a.jpg文件
[aaa@qq.com ~]# yum -y isntall httpd
[aaa@qq.com ~]# vi /var/www/html/index.html
<html><body><h1>This is copy</h1><img src=http://www.test.com/a.jpg / ></body></html>
[aaa@qq.com ~]# systemctl restart httpd
- 盗链主机访问自己的IP,就把源主机的页面给盗过来了
4.在源主机服务器做防盗链
[aaa@qq.com ~]# systemctl stop httpd ##先停掉http服务
[aaa@qq.com ~]# vi /usr/local/httpd/conf/httpd.conf
LoadModule rewrite_module modules/mod_rewrite.so ### 把#号去掉
规则需要添加在<Directory “/usr/local/httpd/htdocs”>中
规则解释:如果访问的域名不是从官网(以www.test.com或者test.com开头的),而是从链接访问的,就会跳转到URL地址http://www.test.com/error.png(error.png自行添加到站点)
[aaa@qq.com ~]# vi /usr/local/httpd/conf/httpd.conf
<Directory "/usr/local/httpd/htdocs">
...省略内容
Require all granted
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://test.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://test.com$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.test.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.test.com/$ [NC]
RewriteRule .*\.(gif|jpg|swf)$ http://www.test.com/error.png
</Directory>
[aaa@qq.com ~]# systemctl restart httpd ## 最后重启 http服务
5.测试,就是错误页面了
推荐阅读
-
Apache网页优化(二)-------- 防盗链和隐藏版本
-
Apache网页压缩缓存与隐藏版本 防盗链
-
理论+实验·Apache网页优化,提升效率,添加防盗链,隐藏apache版本号
-
Apache网页与安全优化(网页压缩、网页缓存、隐藏版本信息、网页图片防盗链)
-
Apache网页优化---网页压缩与缓存
-
Apache网页优化——网页缓存与网页压缩
-
Apache网页优化(一)-------- 网页压缩与缓存
-
企业平台结构--Apache优化--网页优化(网页压缩和缓存),安全优化(防盗链和隐藏版本信息),四个项目实操
-
Apache网页优化之--防盗链与隐藏版本(内涵实验详细过程)
-
Apache网页与安全优化之--网页缓存(内涵实验)