Apache网页配置与优化
概述
在使用Apache作为Web服务器的过程中, 只有对Apache服务器进行适当的优化配置,才能让Apache发挥出更好的性能;反过来说,如果Apache的配置非常糟糕,Apache可能无法正常为我们服务。因此,根据实际的应用需求对Apache服务器的配置进行一定的优化是必不可少的。
优化内容
- 配置网页压缩功能
- 配置网页缓存
- 作模式的选择与参数优化
- 配置隐藏版本号
- 配置防盗链
一、网页压缩
1.1gzip介绍
- 配置Apache的网页压缩功能,是使用gzip压缩算法来对网页内容进行压缩后再传输到客户端浏览器
- 作用
1、降低了网络传输的字节数,加快网页加载的速度
2、节省流量,改善用户的浏览体验
3、gzip与搜索引擎的抓取工具有着更好的关系
1.2Apache的压缩模块
- 压缩模块概述
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实现网页压缩的功能模块包括
mod_gzip模块
mod_deflate模块 - Apache 1.x
没有内建网页压缩技术,但可使用第三方mod_gzip模块执行压缩 - Apache 2.x
在开发的时候,内建了mod_deflate这个模块,取代mod gzip - mod_gzip模块与mod_deflate模块比较
- 两者均使用gzip压缩算法,运作原理类似
- mod_deflate压缩速度略快,而mod_gzip的压缩比略高
- mod_gzip对服务器CPU的占用要高一些
- 高流量的服务器,使用mod_deflate可能会比mod_gzip 加载速度更快
1.3、Apache的压缩实验
准备好安装完成的Apache,
- 检查是否安装了mod deflate模块
[root@localhost ~]# apachectl -D DUMP MODULES I grep "deflate"
如果没有安装mod deflate模块,需要停止Apache服务,重新编译安装Apache,参数中
- 安装压缩模块前先关闭 HTTP 服务
[root@localhost httpd-2.4.29]# systemctl stop httpd
[root@localhost httpd-2.4.29]# yum -y install zlib-devel ##先装这个环境包
- 配置压缩模块
[root@localhost httpd-2.4.29]#
./configure \
--prefix=/usr/local/httpd \
--enable-so \
--enable-rewrite \
--enable-charset-lite \
--enable-cgi \
--enable-cgid \
--enable-deflate
- 编译与安装
```bash
[root@localhost httpd-2.4.29]# make && make install
[root@localhost httpd-2.4.29]# systemctl restart httpd ## 开启http服务
- 编译安装后, mod deflate模块需要在httpd.conf文件启用才能生效。
[root@localhost httpd-2.4.29]# vi /usr/local/httpd/conf/httpd.conf ##添加如下代码
LoadModule deflate_module modules/mod_deflate.so
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/css text/xml text/javascript image/png image/jpg
######对什么样的内容启用gzip压缩,
DeflateCompressionLevel 9
######代表压缩级别
SetOutputFilter DEFLATE
######启用deflate 模块对本站点的输出进行 gzip 压缩。
</IfModule>
- 做测试页
## 把xshell或者别的软件把本地图片放进 /usr/local/httpd/htdocs 里
[root@localhost httpd-2.4.29]# vi /usr/local/httpd/htdocs/index.html
<html>
<head>
<title>-压缩测试页-</title>
</head>
<body><h1>这是一个测试网页内容压缩的页面! ! This is test Page!! </h1>
<img src=abc.png weight=250 height=250 />
</body>
</html>
- 验证实验
在网页输入 20.0.0.22 ,查看显示成功!
- 用wireshaerk抓包测试图片传输是否压缩
找到 HTTP/1.1 200 OK (JPEG JFIF image)
找到 Hyertext Transfer Protocol
找到 HTTP/1.1 200 OK \r\n
找到content-Encoding: gzip \r\n ###这个地方表示图片压缩########
二、网页缓存
2.1、网页缓存介绍
网页缓存是将一部分经常不会改变和变动很少的页面缓存,下次浏览器再次访问这页面时,不需要再次去下载这些页面,从而提高了用户的访问速度。
Apache的mod expires模块会自动生成页面头部信息中的Expres标签和Cache-Control标签,客户端浏览器根据标签决定下次访问是在本地机器的缓存中获取页面,不需要向服务器再次发出请求,从而降低客户端的访问频率和次数,达到减少不必要的流量和增加访问速度的目的。
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、./configure --enable-expires…
2、make && make install - 修改httpd.conf配置文件
1、启用mod_expires模块,并设置http协议下任意格式的文档均60秒后过期
<lfModule mod_expires.c>
ExpiresActive On
ExpiresDefault "access plus 60 seconds"
</lfModule>
- 重启httpd服务
- 重启Apache服务,再用浏览器访问测试网站
- 在浏览器中选择“查看元素”可以看到有“Expires"项表示缓存生效
2.3、配置网页缓存时间实验
- 先关闭 HTTP 服务
[root@localhost httpd-2.4.29]# systemctl stop httpd
- 安装缓存时间模块
[root@localhost opt]# cd /opt/httpd-2.4.29/
./configure \
--prefix=/usr/local/httpd \
--enable-so \
--enable-rewrite \
--enable-charset-lite \
--enable-cgi \
--enable-cgid \
--enable-deflate \
--enable-expires
- 现在进行编译
[root@localhost httpd-2.4.29]# make && make install
[root@localhost httpd-2.4.29]# vi /usr/local/httpd/conf/httpd.conf
LoadModule expires_module modules/mod_expires.so ## 前面的#号去掉,然后在下面插入
<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault "access plus 60 seconds"
</IfModule>
- 检测httpd.conf 语法并启动服务
[root@localhost httpd-2.4.29]# httpd -t
Syntax OK
[root@localhost httpd-2.4.29]# systemctl restart httpd ##开启http服务
- 用wireshaerk现在进行抓包,查看传输是否缓存
找到HTTP/1.1 200 OK (JPEG JFIF image)
找到Hyertext Transfer Protocol
找到HTTP/1.1 200 OK \r\n
找到Cache-Control :max-age=60 \r\n ###这个地方表示缓存60秒###
三、隐藏版本信息
3.1、配置Apache隐藏版本信息
隐藏版本信息概述:
一般情况下,软件的漏洞信息和特定版本是相关的。因此,软件的版本号对攻击者来说是很有价值的
-
Apache的版本信息,透露了一定的漏洞信息,从而给网站带来安全隐患
-
生产环境中要配置Apache隐藏版本信息
-
将主配置文件httpd.conf以下行注释去掉
#Include conf/extra/httpd-default.conf -
修改httpd-default.conf文件
ServerTokens Full修改为ServerTokens Prod -
重启httpd服务,访问验证
3.2、Apache隐藏版本信息实验
- 修改httpd.conf 配置文件
[root@localhost httpd-2.4.29]# vi /usr/local/httpd/conf/httpd.conf
Include conf/extra/httpd-default.conf ## 去掉前面的 # 号
- 修改httpd-default.conf文件
## 修改httpd.conf 配置文件,使httpd-default.conf 文件生效,它里面包含了是否返回版
本信息的内容。
[root@localhost httpd-2.4.29]# vi /usr/local/httpd/conf/extra/httpd-default.conf
ServerTokens Full ==>> 改成 ServerTokens Prod
- 刷新HTTP服务,进行访问测试并进行抓包测试查看
[root@localhost httpd-2.4.29]# systemctl restart httpd ## 重启 httpd服务
找到HTTP/1.1 200 OK (JPEG JFIF image)
找到Hyertext Transfer Protocol
找到HTTP/1.1 200 OK \r \n
找到Server: Apache \r\n ###这个地方的版本号看不见了 ###
四、配置防盗链
概述:
一般来说,我们浏览一个完整的页面并不是一次性全部传送到客户端的。如果所请求的页面带有图片或其他信息,那么第一个Http请求传送的是这个页面的文本,然后通过客户端的浏览器对这段文本进行解释执行,如果发现其中还有图片,那么客户端的浏览器会再次发送一条Http请求,当这个请求被处理后这个图片文件才会被
传送到客户端,最后浏览器会将图片安放到页面的正确位置,就这样一个完整的页面要经过多次发送Http请求才能够被完整的显示
基于这样的机制,就会产生盗链问题:如果一个网站中没有其页面中所说图片信息,那么它完全可以链接到其他网站的图片信息上。这样,没有任何资源的网站利用了别的网站的资源来展示给浏览者,提高了自己的访问量,而大部分浏览者又不会很容易
地发现。一些不良网站为了不增加成本而扩充自己站点内容,经常盗用其他网站的链接。一方面损害了原网站的合法利益,另一方面又加重了服务器的负担。
http标准协议中有专门的Referer字段记录,它的作用如下。
- 可以追溯上一个入站地址是什么。
- 对于资源文件,可以跟踪到包含显示它的网页地址是什么,因此所有防盗链方法都
是基于这个Referer字段。
- 新建一个虚拟机 ,然后配置好httpd的所有服务,IP给设置成 20.0.0.26
[root@localhost opt]# vi /usr/local/httpd/htdocs/index.html
进入后,把里面的内容删除,添加新的内容
<html>
<head>
<title>--压缩测试页--</title>
</head>
<body>
<h1>This is test Page!!</h1>
<img src=http://20.0.0.22/abc.png / >
</body>
</html>
- 做主机映射
[root@localhost htdocs]# vi /etc/host ## 做映射
20.0.0.22 www.51xit.com ##这里是添加的 20.0.0.22 是正版网站的IP
- 我们这里 ping 测试一下,查看是否可以连通
[root@localhost htdocs]# ping www.51xit.com ## ping 测试一下
PING www.51xit.com (20.0.0.22) 56(84) bytes of data.
64 bytes from www.51xit.com (20.0.0.22): icmp_seq=1 ttl=64 time=0.918 ms
64 bytes from www.51xit.com (20.0.0.22): icmp_seq=2 ttl=64 time=0.375 ms
64 bytes from www.51xit.com (20.0.0.22): icmp_seq=3 ttl=64 time=0.364 ms
64 bytes from www.51xit.com (20.0.0.22): icmp_seq=4 ttl=64 time=0.397 ms
--- www.51xit.com ping statistics ---
8 packets transmitted, 8 received, 0% packet loss, time 7004ms
rtt min/avg/max/mdev = 0.341/0.455/0.918/0.178 ms
[root@localhost httpd-2.4.29]# vi /usr/local/httpd/conf/httpd.conf
ServerName www.51xit.top:80 ### 把#号去掉,并改成自己的域名
AddDefaultCharset utf-8 ### 加在上面代码下面就行,解决中文乱码!
[root@localhost htdocs]# systemctl restart httpd
测试一下,打开盗图网站
- 在防盗服务器做防盗链
安装mod_rewrite模块
[root@localhost ~]# systemctl stop httpd ##先停掉http服务
[root@localhost ~]# vi /etc/httpd.conf
LoadModule rewrite_module modules/mod_rewrite.so ### 把#号去掉
######搜索htdocs,然后在目录最后添加下面这段代码#######
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://20.0.0.22/*
RewriteCond %{HTTP_REFERER} !^http://51xit.top/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://51xit.top$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.51xit.top/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.51xit.top$ [NC]
RewriteRule .*\.(gif|jpg|swf|png)$ https://ss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=202451072,4165552475&fm=26&gp=0.jpg [R,NC] ## 这里是图片链接
[root@localhost ~]# systemctl restart httpd ## 最后重启 http服务
- 现在我们在浏览器测试一下
盗取失败!!!