1,网页压缩

网站的访问速度是由多个因素所共同决定的包括:

1)应用程序的响应速度

2)网络带宽

3)服务器性能

4)与客户端之间的网络传输速度等等

其中最重要的就是Apache本身的响应速度,因此提升网站性能第一个需要着手进行处理的便是尽可能地提升Apache的执行速度,使用网页压缩可以提升应用程序的速度,而且不需要任何成本.

Apache的压缩模块

Apache2.x内建了mod_deflate这个模块,使用gzip压缩算法。mod_deflate可使用DeflateCompressionLevel指令来设置压缩级别。该指令的值可为1至(压缩速度最快,压缩质量最低)9(压缩速度最慢,压缩质量最高)之间的整数,其默认值为6(压缩速度和压缩质量较为平衡的值)

(1)首先编译安装Apache源码包

yum –y remove httpd      #编译安装前将系统自带的httpd删掉

tar xzvf httpd-2.4.2.tar.gz -C /opt     #解压源码包

tar xzvf apr-util-1.4.1.tar.gz -C /opt     #解压依赖包

tar xzvf apr-1.4.6.tar.gz -C /opt          #解压依赖包,支持apache上层应用跨平台,提供底层接口库,有效缓解并发连接进程数

cp -R apr-util-1.4.1/ httpd-2.4.2/srclib/apr-util

cp -R apr-util-1.4.1/ httpd-2.4.2/srclib/apr-util

yum -y install gcc gcc-c++ pcre pcre-devel zlib-devel        #安装组件包 构建编译环境

cd httpd-2.4.2/          #进入到httpd目录下进行配置,编译安装

./configure \            

--prefix=/usr/local/httpd \                   #指定httpd安装目录

--enable-deflate \                               #加入mod_deflate模块

--enable-so \                                   

--enable-rewrite \

--enable-charset-lite \

--enable-cgi

make && make install           #进行编译安装      

cd /uar/local/httpd

grep -v "#" bin/apachectl >/etc/init.d/httpd                  #优化启动方式,可以使用service命令管理apache服务

 

vim /etc/init.d/httpd                     

#!/bin/bash

#chkconfig:2345 85 35                                       #在apache启动脚本里加入必要注释

#description:Apache is a web server

chmod 755 /etc/init.d/httpd

304  

chkconfig --add httpd                               #设置apache服务开机自启                                        

chkconfig httpd on    

 

ln -s /usr/local/httpd/conf/httpd.conf /etc/httpd.conf       #在/etc目录下生成一个apache主配置文件的链接,方便管理。

(2)搭建一个web站点www.benet.com,并搭建一个DNS服务,解析域名。

vim /etc/httpd.conf

102

103

104

 

105

 

vim /etc/named.conf

7

vim /etc/named.rfc1912.zones

106  

108  

13  

service named start

可以修改apache站点首页内容,加入图片信息,

vim  /usr/local/httpd/htdocs/index.html

21  

 20  

使用浏览器输 入www.benet.com访问网页,然后使用抓包工具Fiddler进行抓包,

在没启用mod_deflate模块之前显示内容未进行压缩

1  

8  

 

(3)配置mod_ deflate模块启用


编译安装完成后,mod_deflate模块需要在httpd.conf文件里启用才能生效

vim /etc/httpd.conf  

LoadModule filter_module modules/mod_filter.so

LoadModule headers_module modules/mod_headers.so              #开启模块服务

LoadModule deflate_module modules/mod_deflate.so

100  

在httpd.conf配置文件末尾,加入mod_deflate的配置项。

<IfModule mod_deflate.c>                

AddOutputFilterByType DEFLATE text/html text/plain text/css text/xml text/javascript         #第一行代表对什么样的内容启用gzip压缩

DeflateCompressionLevel 9                                                                                             #第二行代表压缩级别

SetOutputFilter DEFLATE                                                                                               #第三行代表启用deflate模块压对本站点的输出进行gzip压缩

</IfModule>

101  

配置文件修改完成之后可以检测是否启用mod_deflate模块,然后启动apache服务

cd  /usr/local/httpd/bin

./apachectl –t –D DUMP_MODULES | grep “deflate”

311  

service httpd start

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

 

打开Fiddler抓包工具,用浏览器访问Apache服务器的页面,可以看到响应头中包含有Content-Encoding:gzip,表示压缩已经生效

200

 

2,网页缓存

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

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

配置mod_exprices模块的步骤与mod_deflate模块相似。

在启用mod_exprices模块功能之前,可以打开浏览器输入www.benet.com访问网页,使用Fiddler抓包工具先抓取数据包,查看是否缓存设置expires项,可以和启用mod_exprices模块之后进行对比

30

(1)安装mod_ exprices模块

以刚才安装的apache源码包为基础,首先关闭apache服务,加入mod_exprices模块重新进行编译安装
























service htted stop

cd /opt/httpd-2.4.2/

./configure \

--prefix=/usr/local/httpd \

--enable-deflate \                     # 加入mod_deflate模块

--enable-expires \                      #加入mod_exprices模块

--enable-so \

--enable-rewrite \

--enable-charset-lite \

--enable-cgi

Make && make install            #编译安装

(2)配置mod_exprices模块

vim  /etc/httpd.conf

LoadModule expires_module modules/mod_expires.so        #开启mod_exprices模块

在httpd.conf末尾添加mod_exprices模块设置项

<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault "access plus 60 seconds"                              #添加缓存时间60秒
</IfModule>

303

31





然后重新启动apache服务

service httpd restart

(3)测试缓存是否生效

打开Fiddler抓包工具,用浏览器访问Apache服务器的页面,可以看到响应头中包含有expires项,说明缓存已经在工作

32

33

3,防盗链

Apache的默认设置除了可以对性能进行优化外,还需要对安全性进行相应的设置,

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

准备环境:

1)客户端使用Windows系统,IP地址192.168.30.100   搭建盗链网站www.test.com

2)源主机redhat6.5系统,IP地址192.168.30.15  搭建源网站www.benet.com

(1)在客户端搭建盗链网站www.test.com,并在hosts文件中加入以上IP地址与域名的映射关系

开启internet信息服务管理器

 

43

打开IIS,进行站点设定

 

42

新建一个文件,编写html格式,将图片信息指向源主机,并将文件格式修改为html格式,放入站点wwwroot

 

7

 

41

6

在hosts文件中加入映射关系

40

在浏览器中分别输入www.benet.comwww.test.com进行访问,可以看到图片内容没有差异,

1

5

使用Fiddler抓包工具抓取数据,可以看到先对www.test.com请求,然后对www.benet.com/abc.jpg请求,说明盗链成功

 









44

(2)apache防盗链配置

如果没有安装mod_rewrite模块,需要停止apache服务,重新编译安装,在参数中加入mod_rewrite模块。

cd httpd-2.4.2/

./configure \

--prefix=/usr/local/httpd \

--enable-deflate \

--enable-so \

--enable-rewrite \                      #加入mod_rewrite模块

--enable-charset-lite \

--enable-cgi

Make && make install

(3)配置mod_rewrite模块启用

vim /etc/httpd.conf

4

在站点目录结尾加入rewrite设定

<Directory "/usr/local/httpd/htdocs">

………………………………………………..

RewriteEngine On

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  

</Directory >

最终的匹配结果为:第二,三,四,五行的信任的站点,能够使用网站的图片;除了信任站点以外的站点,如果直接访问以gif,jpg,swf结尾的文件将跳转到重定向页面。

3

重新启动apache服务

(4)测试mod_rewrite重定向是否生效

清除浏览器的缓存,避免从本地读取缓存内容,将error.png这个图片移动到站点目录/usr/local/httpd/htdocs  ,再次访问网站,如下图所示

45

 

2

4,隐藏版本信息

一般情况下,软件的漏洞信息和特定的版本是相关的,因此软件的版本号对×××者来说是很有价值的,用Fiddler抓包工具可以看到apache的版本,

310

如果×××或别有用心的人得到apache的版本信息,就会有针对性地进行×××,给网站造成很大的损失,所以我们要隐藏apache的版本号,减少受×××的风险,保护服务器安全运行。

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

306

然后修改httpd-default.conf文件

 

307

 

308

重新启动apache服务,再次访问网页,使用Fiddler抓包工具抓取数据包,可以看到版本信息已经隐藏。

 

309