一、网页压缩与缓存

        注意文章中的http为源代码包安装,配置时指定了mod_deflate、mod_expires、mod_rewrite模块。所有的模块是否生效可以通过在浏览器中找到"开发工具"中的网络选项卡中的信息进行验证,里面有请求报文和响应报文的部分信息。

        通过对网页资源进行压缩,之后再传输可以提升Apache应用程序的速度。有一个方法就是gzip。

      1.1 网页压缩

        1.1.1 HTTP的压缩过程

        利用Apache中的gzip模块,可以使用gzip压缩算法对要发送的网页内容进行压缩后再传输到客户端的浏览器。需要注意的是客户端的浏览器是否支持HTTP压缩。若支持,则压缩的整体流程如下:

        1.1.2 Apache的压缩模块

        根据版本的不同,Apache的压缩模块分为两种,分别是1.x版本的mod_gzip模块和2.x版本的mod_defalte模块,其中mod_gzip是第三方的模块。mod_deflate的压缩速度略快且消耗资源较少,而mod_gzip的压缩比略高。

        要开启压缩模块,需要在httpd的主配置文件中,找到"LoadModule deflate_module modules/mod_deflate.so"语句,取消它的注释,并在它的上面添加"LoadFile /usr/lib64/libz.so"。然后添加以下内容:

<IfModule mod_deflate.c>

DeflateCompressionLevel 6 #设置压缩比

SetOutputFilter DEFLATE #启用deflate模块对本网站的输出进行gzip压缩

AddOutputFilterByType DEFLATE text/html text/css text/xml text/javascript text/jpg text/png

#对文本的内容进行压缩,如text/html、text/css、text/xml。

<IfModule>

         可从响应头中找到请求头"compression-Encoding"字段,找到gzip,表示使用gzip进行压缩。

        1.2 网页缓存

        网页缓存是将一些不会变动或者很少变动的页面缓存,方便下次访问,提高访问速度。Apache的mod_expires模块可以实现此功能。要启用此模块的方法为:

①在主配置文件中找到"LoadModule expires_module modules/mod_expires.so",去掉前面的注释。

②在文件中添加以下内容:

<IfModule mod_expires.c>

ExpiresActive On

ExpiresDefault "access plus 60 seconds"    #设置缓存为60s

</IfModule>

③重启服务

        在网页中访问自己设置的服务器,即可从响应头中找到"Expires"字段和"Data"字段。记录此次缓冲的有效期。

二、隐藏版本信息

        通过隐藏Apache的版本信息,可以提高服务器的安全性,应为有些人可以通过版本信息知晓服务器的一些漏洞,从而进行攻击。

        关于版本信息显示的控制选项在"httpd-default.conf"文件中,这个选项名为"ServerTokens",它支持的显示信息的详细程度:

        以上这些选项就是可以设置的级别,默认为Full。注意此文件被包含在httpd的主配置文件中,需要找到并取消它的注释,此修改才会生效。可以通过查看开发工具中的响应头中的"Server"字段看到版本信息。可以在浏览器的开发工具中的响应头的Server字段中查看版本信息。

三、Apache防盗链

        一般用户浏览一个完整的页面并不是一次性传输到客户端的,如果请求的页面中带有图片或其他信息,那么第一次会传输文本,客户端会再发送一次请求,传输图片或其他信息,由浏览器负责这些信息在页面上的位置。

        基于这样的机制,就会产生盗链的问题,即一个网站A中可以使用一个链接,这个链接是其他服务器B上图片的链接,用户向A请求这个图片,进行解析的不是网站A,而是B,这就会消耗B的性能资源,加重了B的负担。

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

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

        3.1 配置防盗链

        Apache防盗链需要安装mod_rewrite模块。mod_rewrite模块需要在httpd的主配置文件中启用才能生效(默认是生效语句被注释掉了)。再添加以下语句:

<Directory "/usr/local/httpd/htdocs"> #注意此文件路径为安装httpd的源码包指定的/usr/local/。

RewriteEngine On

RewriteCond %{HTTP_REFERER} !^htttp://fkk.com/.*$ [NC]

RewriteCond %{HTTP_REFERER} !^http://fkk.com [NC]

RewriteCond %{HTTP_REFERER} !^http://www.fkk.com/.*$ [NC]

RewriteCond %{HTTP_REFERER} !^http://www.fkk.com [NC]

RewriteCond .*\.(gif|jpg|swf)$ http://www.fkk.com/error.png

</Directory>

        在上面以"RewriteCond"开头的前4句都是匹配用户请求的目标的网址是否为自己,如果为自己,就会返回正确的资源,不是的话若该次请求的资源中有图片则返回error.png图片。这些匹配规则写得越多,越精细,防护效果就越好。防盗链的匹配规则表为:

%{HTTP_REFERER}请求头中的链接字段,存放一个链接的URL,代表是从哪个链接访问所需的网页
!^不以后面的字符串开头
.*$以任意字符结尾
NC不区分大小写
R强制跳转
?匹配0到1个字符
*匹配0到多个字符
+匹配1到多个字符

        

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部