一:网页压缩与缓存
1.1:网页压缩
网站的访问速度是由多个因素所共同决定的, 这些因素包括应用程序的响应速度、网络带宽、服务器性能、与客户端之间的网络传输速度等等。其中最重要的一个因素是Apache本身的响应速度。因此当为网站性能所苦恼时, 第一个需要着手进行处理的便是尽可能的提升Apache 的执行速度, 可以使用网页压缩提升应用程序的速度。更重要的是, 它完全不需要任何的成本, 只不过是会让服务器CPU 占用率稍微提升一两个百分点或者更少
1:Apache的压缩模块
Apache 1.x 系列没有内建网页压缩技术, 使用的是额外的第三方mod_gzip 模块来执行压缩。而Ap ache 2.x 官方在开发的时候, 就把网页压缩考虑进去, 内建了mod_deflate 这个模块, 用以取代mod_gzip 。两者都是使用的gzip 压缩算法, 它们的运作原理是类似的。
mod_deflate 压缩速度略快而mod_gzip 的压缩比略高。一般默认情况下, mod_gzip会比mod_deflate 多出4%~6 %的压缩址。
如果网站访问量较小, 想要加快网页的加载速度, 就使用mod_gzip 。虽然会额外耗费一些服务器资源, 但也是值得的。如果网站访问簸较大, 并且使用的是共享的虚拟主机, 所分配系统资源有限的话, 使用mod_deflate 将会是更好的选择。
Apache 2 .4 .25 版本中mod_deflate 模块,可使用DeflateCom pressionlevel 指令设置压缩级别。该指令的值可为1 (压缩速度最快, 最低的压缩质址) 至9 (最慢的压缩速度,压缩率最高) 之间的整数,其默认值为6 ( 压缩速度和压缩质扯较为平衡的值)。这个简单的变化更是使得mod_deflate 可以轻松娥美mod_gzip 的压缩。
2:mod_deflate 模块
检查是否安装mod_deflate 模块。
[root@apache httpd-2.4.25)#apachectl-t-D DUMP _MODULES
[root@apache~}# apachectl -t-D DUMP _MODULES I grep "deflate"
( 1 ) 重新编译Apa che 添加mod_deflate 模块
[root@apache~]# tar zxf httpd-2.4.25. tar.gz -C /usr/src
[root@apache ~]#cd /usr/src/httpd-2.4.25/
[root@apache
httpd-2.4.25]#./configure-prefix=/usrnocal/httpd-enable-so-enable-rew巾e-enable-charset-I
ite-enable-cgi-enab le-deflate
[root@apache httpd-2.4.25]#make && make install
[root@apache httpd-2 .4.25]#ln-s/us~几ocal/httpd/binr /usr/local/bin
( 2 ) 配置mod_deflate 模块启用
在httpd .conf 文件, 开启LoadModule deflate_module modu les/mod_deflate. so 配置项, 在文本末尾添加一下参数。
( 3 ) 检查安装情况
检测httpd. conf 语法, 然后重新启动Apache 服务器, 并检查mod_deflate 模块安装情况
( 4 ) 测试mod_deflate 压缩是否生效
1.2:网页缓存
网页缓存是将一部分经常不会改变和变动很少的页面缓存,下次浏览器再次访问这些页面时,不需要再次去下载这些页面,从而提高了用户的访问速度。
Apache 的mod_expi res 模块会自动生成页面头部信息中的Expires 标签和Cache-Control 标签, 客户端浏览器根据标签决定下次访问是在本地机器的缓存中获取页面, 不需要向服务器再次发出请求, 从而降低客户端的访问频率和次数, 达到减少不必要的流量和增加访问速度的目的。
配置mod_expi res 模块的步骤与mod_deflate 模块相似。
(1) 配置mod_expires 模块启用
启用mod_expi res 模块之前, 可以用浏览器先抓取数据包,然后修改httpd .conf 文件再抓取数据包进行对比。在httpd .conf 去掉LoadModule expires_module modules/mod_expires . so 前面的#注释, 末尾加入以下内容
( 2 ) 检测httpd .conf 语法
( 3 ) 重启Apache 服务
使用浏览器访问Apache 服务器的URL 地址, 在浏览器中选择"查看元素"可以查看到响应头中包含了Expires 项, 说明缓存已经工作
二:隐藏版本信息
一般情况下, 软件的漏洞信息和特定版本是相关的。因此, 软件的版本号对攻击者来说是很有价值的, 在浏览器中选择"查看元素"可以看到Apache 的版本2 .4 .25
修改httpd.conf 配置文件,使httpd-defauIt. conf 文件生效, 它里面包含了是否返回版本信息的内容
[root@apache~]# vim /usr/local/httpd/conf/httpd.conf
Include conf/extra/httpd-default.conf //去掉前面的#然后, 修改httpd-default.conf 文件
[root@apache ~]# vim /usr/local/httpd/conf/extra/httpd-default.confServerTokens Prod //将原本的Full 改为Prod
重新启动Apache 服务, 使用浏览器访问Apache 服务器的URL 地址, 在浏览器中选择查看元素"可以查看到Apache 的版本号已隐藏
|-------|--------------------------------------------------|
| 选项 | 输出格式 |
| 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 |
[Serve Tokens 输出格式]
三:Apache防盗链
Apache 的默认配置除了性能可以优化外, 还需要对安全性进行相应的配置。默认配置能保证服务器正常提供服务, 但Apache 作为一个软件, 必然也会存在一些漏洞, 尽可能的降低潜在的风险,是管理员必须掌握的内容。
一般来说, 用户浏览一个完整的页面并不是一次性全部传送到客户端的。如果所请求的页面带有图片或其他信息, 那么第一个HTTP 请求传送的是这个页面的文本, 然后通过客户端的浏览器对这段文本进行解释执行。如果发现其中还有图片, 那么客户端的浏览器会再次发送一条HTTP 请求, 当这个请求被处理后这个图片文件才会被传送到客户端, 最后浏览器会将图片安放到页面的正确位置, 就这样一个完整的页面要经过多次发送HTTP 请求才能够被完整的显示。
基千这样的机制, 就会产生盗链问题: 如果一个网站中没有其页面中所说图片信息, 那么它完全可以链接到其他网站的图片信息上。这样, 没有任何资源的网站利用了其他网站的资源来展示给浏览者, 提高了自己的访问量, 而大部分浏览者又不会很容易地发现。一些不良网站为了不增加成本而扩充自己站点内容, 经常盗用其他网站的链接。一方面损害了原网站的合法利益, 另一方面又加重了服务器的负担。
HTTP 标准协议中有专门的Referer 字段记录, 它的作用如下。
- 可以追溯上一个入站地址是什么。
- 对于资源文件, 可以跟踪到包含显示它的网页地址是什么, 因此所有防盗链方法都是基千这个Referer 字段。
3.1:Apache 防盗链
Apache 防盗链需要安装mod_rewrite 模块, 在www.kx「.com 安装步骤如下
( 1 ) 配置mod_rewrite 模块启用
mod_rewrite 模块需要在httpd.conf 文件启用才能生效。
[root@apache cont]# vim httpd.conf
AllowOverride ALL //改为ALL
RewriteEngine On //加入mode_rewrite 模块内容
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
( 2 ) 检测httpd.conf 语法
然后重新启动Apache 服务器。
( 3 ) mod_rewrite 模块主要的功能就是实现URL 的跳转, 它的正则表达式是基千Perl语言, 可基千服务器级的(httpd. conf)和目录级的(.htaccess)两种方式。
( 4 ) 基千服务器级的(httpd.conf)有两种方法, 一种是在httpd.conf 的全局下直接利用RewriteEngine on 来打开rewrite 功能; 另一种是在局部里利用RewriteEngi ne on 来打开rewrite 功能。
( 5 ) 基千目录级的(.htaccess) , 要注意一点就是必须打开此目录的FollowSymlinks 属性且在htaccess 里要声明RewriteEngine on 。
( 6 ) 开启rewrite 功能后, 需要设置RewriteCond 指令, 它定义了匹配规则。如果符合某个或某几个条件, 则执行RewriteCond 下面紧邻的RewriteRule 指令。如果不匹配, 则后面的规则不再匹配, RewriteRule 则定义需要重定向到的路径。
规则 | 描述 |
---|---|
%{HTTP _REFERER} | 浏览header 中的链接字段, 存放一个链接的URL , 代表是从哪个链接访问所需的网页 |
!^ | 不以后面的字符串开头 |
.*$ | 以任意字符结尾 |
NC | 不区分大小写 |
R | 强制跳转 |
? | 匹配0 到1 个字符 |
* | 匹配0 到多个字符 |
+ | 匹配1 到多个字符 |
^ | 字符串开始标志 |
$ | 字符串结束标志 |
. | 匹配任何单字符 |
[匹配规则表] |
C 7 ) RewriteEngine On 打开了重写引擎, 根据匹配规则我们分析
最后的规则是不以"http ://www.kxr. com "为路径, 即不是本网站进行访问, 后面是任意字符都可以匹配成功, 其它几项可对照规则表分析。
( 8 ) 如果请求路径被匹配, 执行重定
重启服务器, 并且清除浏览器的缓存, 避免从本地读取缓存内容, 复制error.png 这个图片到工作目录/usr/local/httpd/htdocs , 再次访问网站