Apache网页优化

网页压缩与缓存

在使用Apache作为Web服务器的过程中,只有对Apache服务器进行适当的优化配置,才能让Apache发挥出更好的性能。反过来说,如果Apache的配置非常糟糕,Apache可能无法正常为我们服务。因此,针对各种企业应用需求对Apache服务器的配置进行一定的优化是必不可少的。

网页压缩

网站的访问速度是由多个因素所共同决定的,这些因素包括应用程序的响应速度、网络带宽、服务器性能、与客户端之间的网络传输速度等等。其中最重要的一个因素是Apache本身的响应速度。因此当为网站性能所苦恼时,第一个需要着手进行处理的便是尽可能的提升Apache的执行速度,可以使用网页压缩提升应用程序的速度。更重要的是,它完全不需要任何的成本,只不过是会让服务器CPU占用率稍微提升一两个百分点或者更少。

1.gzip介绍

gzip是一种流行的文件压缩算法,目前应用非常广泛,尤其是在Liux平台。当使用gzip压缩一个纯文本文件时,效果是非常明显的,大约可以减少70%以上的文件大小。利用Apache中的gzip模块,可以使用gzip压缩算法来对Apache服务器发布的网页内容进行压缩后再传输到客户端浏览器。经过压缩后,实际上降低了网络传输的字节数,最明显的好处就是可以加快网页加载的速度。
网页加载速度加快的好处不言而喻。除了节省流量,改善用户的浏览体验外,另一个潜在的好处是gzip与搜索引擎的抓取工具有着更好的关系。

2.HTTP压缩的过程

Web服务器接收到浏览器的HTTP请求后,检查浏览器是否支持HTTP压缩(Accept--Encoding信息)。如果浏览器支持HTTP压缩,Web服务器检查请求文件的后缀名。如果请求文件是HTML、CSS等静态文件,Web服务器到压缩缓冲目录中检查是否已经存在请求文件的最新压缩文件。如果请求文件的压缩文件不存在,Wb服务器向浏览器返回未压缩的请求文件,并在压缩缓冲目录中存放请求文件的压缩文件。如果请求文件的最新压缩文件已经存在,则直接返回请求文件的压缩文件。如果请求文件是动态文件,Web服务器动态压缩内容并返回浏览器,压缩内容不存放到压缩缓存目录中。

3.Apache的压缩模块

Apache1.X系列没有内建网页压缩技术,使用的是额外的第三方mod_gzip模块来执行压缩。而Apache2.X官方在开发的时候,就把网页压缩考虑进去,内建了mod_deflate这个模块,用以取代mod_gzip。两者都是使用的gzip压缩算法,它们的运作原理是类似的。

mod_deflate压缩速度略快而mod_gzip的压缩比略高。一般默认情况下,mod_gzip会比mod_deflate多出4%~6%的压缩量。

一般来说,mod gzip对服务器CPU的占用要高一些。mod deflate是专门为确保服务器的性能而使用的一个压缩模块,mod deflate需要较少的资源来压缩文件。这意味着在高流量的服务器,使用mod_deflate可能会比mod_gzip加载速度更快。

简而言之,如果网站访问量较小,想要加快网页的加载速度,就使用mod gzip。虽然会额外耗费一些服务器资源,但也是值得的。如果网站访问量较大,并且使用的是共享的虚拟主机,所分配系统资源有限的话,使用mod_deflate将会是更好的选择。

Apache2.4.25版本中mod_deflate模块,可使用DeflateCompressionLevel指令设置压缩级别。该指令的值可为1(压缩速度最快,最低的压缩质量)至9(最慢的压缩速度,压缩率最高)之间的整数,其默认值为6(压缩速度和压缩质量较为平衡的值)。这个简单的变化更是使得mod_deflate可以轻松媲美mod_gzip的压缩。

4.mod_deflate模块

检查是否安装mod deflate模块。

(1)重新编译Apache添加mod_deflate模块

(2)配置mod deflate模块启用

在httpd.conf文件,开启LoadModule deflate_module modules./mod deflate.so配置项,在文本末尾添加一下参数。

(3)检查安装情况
检测httpd.conf语法,然后重新启动Apache服务器,并检查mod_deflate模块安装情况。

(4)测试mod_deflate压缩是否生效

使用火狐浏览器访问Apache服务器的URL地址,在浏览器中选择“查看元素”可以看到有“Accept--Encoding:gzip”表示压缩已经生效,如图4.1所示。

网页缓存

网页缓存是将一部分经常不会改变和变动很少的页面缓存,下次浏览器再次访问这些页面时,不需要再次去下载这些页面,从而提高了用户的访问速度。

Apache的mod_expires模块会自动生成页面头部信息中的Expires标签和Cache-Control标签,客户端浏览器根据标签决定下次访问是在本地机器的缓存中获取页面,不需要向服务器再次发出请求,从而降低客户端的访问频率和次数,达到减少不必要的流量和增加访问速度的目的。

配置mod expires模块的步骤与mod deflate模块相似。

(1)配置mod expires模块启用

启用mod_expires模块之前,可以用浏览器先抓取数据包,然后修改httpd.conf文件再抓取数据包进行对比。在httpd.conf去掉LoadModule expires_modulemodules/.mod_expires.so前面的#注释,末尾加入以下内容。

(2)检测htpd.conf语法

(3)重启Apache服务

使用火狐浏览器访问Apache服务器的URL地址,在浏览器中选择“查看元素”可以查看到响应头中包含了Expires项如图4.2所示,说明缓存已经工作。

隐藏版本信息

一般情况下,软件的漏洞信息和特定版本是相关的。因此,软件的版本号对攻击者来说是很有价值的,在浏览器中选择“查看元素”可以看到Apache的版本2.4.25,如图4.3所示。

如果黑客或别有用心的人得到Apache的版本信息,就会有针对性的进行攻击,给网站造成很大的损失。所以实际生产环境中要隐藏Apache的版本号,减少受攻击的风险,保护服务器安全运行。

修改htpd.conf配置文件,使htpd-default.conf文件生效,它里面包含了是否返回版本信息的内容。

然后,修改htpd-default.conf文件。

重新启动Apache服务,使用火狐浏览器访问Apache服务器的URL地址,在浏览器中选择“查看元素”可以查看到Apache的版本号已隐藏,如图4.4所示。

显示Server:Apache,版本信息已经被隐藏。ServerTokens表示Server回送给客户端的回应头域是否包含关于服务器OS类型和编译进的模块描述信息,这里设置的是Prod。
表4-1列出ServerTokens的选项以及输出格式。

Apache防盗链

Apache的默认配置除了性能可以优化外,还需要对安全性进行相应的配置。默认配置能保证服务器正常提供服务,但Apache作为一个软件,必然也会存在一些漏洞,尽可能的降低潜在的风险,是管理员必须掌握的内容。

一般来说,用户浏览一个完整的页面并不是一次性全部传送到客户端的。如果所请求的页面带有图片或其他信息,那么第一个HTTP请求传送的是这个页面的文本,然后通过客户端的浏览器对这段文本进行解释执行。如果发现其中还有图片,那么客户端的浏览器会再次发送一条HTTP请求,当这个请求被处理后这个图片文件才会被传送到客户端,最后浏览器会将图片安放到页面的正确位置,就这样一个完整的页面要经过多次发送HTTP请求才能够被完整的显示。

基于这样的机制,就会产生盗链问题:如果一个网站中没有其页面中所说图片信息,那么它完全可以链接到其他网站的图片信息上。这样,没有任何资源的网站利用了其他网站的资源来展示给浏览者,提高了自己的访问量,而大部分浏览者又不会很容易地发现。一些不良网站为了不增加成本而扩充自己站点内容,经常盗用其他网站的链接。一方面损害了原网站的合法利益,另一方面又加重了服务器的负担。

HTTP标准协议中有专门的Referer字段记录,它的作用如下。

  • 可以追溯上一个入站地址是什么。
  • 对于资源文件,可以跟踪到包含显示它的网页地址是什么,因此所有防盗链方法都是基于这个Referer字段。

配置防盗链

准备两台服务器、一台客户端,且两台服务器上己分别部署完Apache服务。具体实验环境如表4-2)所示。

(1)在Windows系统中访问www.kxr.com和w.dt.com,确保Apache工作正常,如图4.5所示。

(2)准备图片
把图片复制到主服务器(www.kxr.com)的Apache工作目录usr/local/httpd/htdocs,确保图片存在。

修改index.html网页文件,加入图片显示代码。

再次访问网页,图片可以显示,如图4.6所示。

鼠标右键点选图片,选择“查看图像信息”,可以看到图片的网址是www.kxr.com/logo.jpg,如图4.7所示。

(3)模拟盗取图片链接

在www.dt.com服务器,修改index.html文件,加入盗取图片链接。

访问ww.dt.com图片即可显示,如图4.8所示。

鼠标右键点选图片,选择“查看图像信息”,可以看到图片的网址是www.kxr.com/logo.jpg.

如图4.9所示,在火狐浏览器右键选择“查看元素”可以看到先对wwww.dt.com请求,然后对www.kxr.com/logo.jpg请求,说明盗链成功。

由此可以看出盗取链接对正常服务器流量肯定会产生影响,不属于自己的流量服务被盗取,加重了服务器的负担。

Apache防盗链

Apache防盗链需要安装mod_rewrite模块,在www.kxr.com安装步骤如下。

(1)配置mod rewrite模块启用

mod_rewrite模块需要在httpd.conf文件启用才能生效。

后面会详细分析相关语法。

(2)检测httpd.conf语法

然后重新启动Apache服务器。

(3)mod rewrite模块主要的功能就是实现URL的跳转,它的正则表达式是基于Perl语言,可基于服务器级的(httpd.conf和目录级的(.htaccess)两种方式。
(4)基于服务器级的httpd.conf)有两种方法,一种是在httpd.conf的全局下直接利用RewriteEngine on来打开rewrite功能;另一种是在局部里利用RewriteEngine on来打开rewrite功能。
(5)基于目录级的(.htaccess),要注意一点就是必须打开此日录的FollowSymLinks属性且在.htaccess里要声明RewriteEngine on。
(6)开启rewrite功能后,需要设置RewriteCond指令,它定义了匹配规则。如果符合某个或某几个条件,则执行RewriteCond下面紧邻的RewriteRule指令。如果不匹配,则后面的规则不再匹配,RewriteRule则定义需要重定向到的路径。

匹配规则如表4-3所示。

(7)RewriteEngine On打开了重写引擎,根据匹配规则我们分析“RewriteCond%{HTTP_REFERER}!http:www.kxr.com/.*$[NC]"含义。
  • "%{HTTP_REFERER}”:表示从哪个URL来产生请求。
  • “!^”:表示不是以后面的字符串开头。
  • “http:www.kxr.com”,是本网站的路径,按整个字符串匹配。
  • “.*$”表示以任意字符结尾。
  • “NC”表示不区分大小写字母。

最后的规则是不以“htp:www.kxr.com”为路径,即不是本网站进行访问,后面是任意字符都可以匹配成功,其它几项可对照规则表分析。

(8)如果请求路径被匹配,执行重定

“RewriteRule.*\(gifljpg|swf)$http:lww.kXr.com/error.png”。

  • “.”表示匹配一个字符。
  • “*”表示匹配0到多个字符,与“.”合起来的意思是匹配1到多个字符,实际上可以只用“+“表示,这里是为了演示使用方式。
  • “\.”在这里表示的是转义字符“.”,因为“.”在指令中是属于规则字符,有相应的含义,如果需要匹配,需要在前面加个“\”,其它规则字符如果需要匹配,也做同样处理。
  • “(gifljpg|swf)”表示匹配“gif"、"jpg”、“swf"任意一个,“$”表示结束。最后的规则是以“gif'、“jpg”、“.Swf结尾,前面是1到多个字符的字符串,也就是匹配图片类型的文件。
  • “http:/www.kxr.com/error.png”:表示转发到这个路径整个配置的含义是本网站以外的站点访问本站的图片文件时,显示error.png这个图片。

重启服务器,并且清除浏览器的缓存,避免从本地读取缓存内容,复制eror.png这个图片到工作目录usr/local/httpd/htdocs,再次访问网站,如图4.10所示。

可以看到防盗链图片己经工作,其它网站盗链,返回给它禁止盗链的图片。
如图4.11所示,使用火狐浏览器可以看到1og0.jpg的http状态码是302,它表示重定向,再次说明防盗链配置成功。

  • 12
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值