apache网页和安全优化
一、Apache网页优化:在企业中,部署Apache后只采用默认的配置参数,会引发网站很多问题,换言之默认配置是针对以前较低的服务器配置的,以前的配置已经不适用当今互联网时代,为了适应企业需求,就需要考虑如何提升Apache的性能与稳定性,这就是Apache优化
- 优化内容:配置网页压缩功能、工作模式的选择与参数优化、配置防盗链、配置隐藏版本号…….
- gzip:是一种流行文件压缩算法,将源文件压缩到一个纯文本文件中,可减少70%以上文件大小。
- http压缩:使用gzip压缩算法来对网页内容进行压缩后再传输到客户端浏览器
作用:降低了网络传输的字节数,加快网页加载的速度,节省流量,改善用户的浏览体验
- Apache的压缩模块mod_gzip 模块和mod_deflate 模块
Apache 1.x:没有内建网页压缩技术,但可使用第三方mod_gzip 模块执行压缩
Apache 2.x:在开发的时候,内建了mod_deflate 这个模块,取代mod_gzip
mod_gzip 模块与mod_deflate 模块
a. 两者均使用gzip压缩算法,运作原理类似
b. mod_deflate 压缩速度略快,而mod_gzip 的压缩比略高
c. mod_gzip 对服务器CPU的占用要高一些
d. 高流量的服务器,使用mod_deflate 可能会比mod_gzip 加载速度更快
- 网页压缩配置实验
实验目的:实现网页压缩
实验准备: 联网httpd服务器和网页文件
实验步骤:
- 首先检查是否安装了mod_deflate模块
执行apachectl -t -D DUMP_MODULES | grep "deflate"命令
如果输出中没有deflate_module (static),说明编译时没有安装mod_deflate模块,若没有安装则要停止apaache服务,重新编译安装,在参数中加入mod_deflate模块
./configure --prefix=/usr/local/httpd --enable-deflate --enable-so --enable-rewrite --enable-charset-lite --enable-cgi
make && make install
- 启用mod_deflate模块
- 在配置httpd.conf中配置开启gzip功能,开启deflate模块并在底部添加如下代码
AddOutputFilterByType DEFLATE text/html text/plain text/css text/xml text/javascript #第一行代表对什么样的内容启用gzip压缩
DeflateCompressionLevel 9 #第二行代表压缩级别
SetOutputFilter DEFLATE #第三行代表启用deflate模块对本站点的输出进行gzip压缩
- 检查httpd.conf语法
apachectl -t
- 检查模块是否安装
apachectl -t -D DUMP_MODULES | grep "deflate"
- 测试压缩是否生效,重启Apache服务,再用浏览器访问测试网站,并用Fiddler工具抓包,进行对比分析
- 配置网页的缓存时间
网页缓存:将一部分经常不会改变或变动很少的页面缓存,下次浏览器再次访问这些页面时,不需要再次去下载这些页面,从而提高了用户的访问速度。
启用mod_expire模块后,会自动生成页面头部信息中的Expires标签和Cache-Control标签,从而降低客户端的访问频率和次数,达到减少不必要的流量和增加访问速度的目的
实验目的:实现网页缓存
实验准备:联网的apache服务器和网页文件
实验步骤:
- 检查mod_expires模块是否安装
/usr/local/apache/bin/apachectl -t -D DUMP_MODULES | grep "expires"
- 安装mod_expires模块
systemctl stop httpd
#以前编译过的模块也要加上
make && make install
- 配置mod_expires模块启用,在主配置文件底部添加,并启用expires模块
vim /usr/local/httpd/conf/httpd.conf
<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault "access plus 60 seconds” #任一格式文档60秒后过期
</IfModule>
- 检查httpd.conf语法
- 检查模块是否安装
/usr/local/httpd/bin/apachectl -t -D DUMP_MODULES | grep "expires"
- 测试缓存是否生效,systemctl start httpd
响应头包含expires项,证明缓存已工作
- apache安全优化
- 防盗链:防盗链就是防止别人的网站代码里面盗用服务器的图片、文件、视频等相关资源,如果别人盗用网站的这些静态资源,明显的是会增大服务器的带宽压力, 所以作为网站的维护人员,要杜绝我们服务器的静态资源被其他网站盗用
- Referer字段作用:可以追溯上一个入站地址是什么;对于资源文件,可以跟踪到包含显示它的网页地址是什么。所有防盗链方法都基于它
- 盗链模拟
实验准备:两台可通信电脑或虚拟机centos7系统,源主机www.bt.com IP(192.168.100.10),盗链网站www.test.com (192.168.100.100),客户端用window系统并在hosts文件添加域名和IP映射
实验目的:盗链网站盗取源网站图片
实验步骤
- 访问网站,确保能正常访问
- 准备图片:源主机上把图片复制到/usr/local/httpd/htdocs下,打开网页确保图片存在
- 模拟盗取图片链接:在盗图主机index.html文件中加入图片地址
访问www.test.com可以看到www.bt.com的图片,盗图成功
- 防盗链配置mod_rewrite:主要功能是实现URL跳转,正则表达式基于Perl语言
- 检查是否安装mod_rewrite
/usr/local/httpd/bin/apachectl -t -D DUMP_MODULES | grep "rewrite"
- 安装mod_rewrite,如没安装先停止apache服务
./configure --prefix=/usr/local/httpd --enable-deflate --enable-so --enable-rewrite --enable-charset-lite --enable-cgi
Make && make install
- 配置mod_rewrite模块启用,启用rewrite模块,在<Directory 网站根目录>标签内添加下列内容
vim /usr/loca RewriteEngine On
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://www.bt.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.bt.com$ [NC]
RewriteRule .*\.(png|jpeg|jpg|gif)$ -F
- 检查httpd.conf语法
apachectl -t
- 检查模块是否安装
apachectl -t -D DUMP_MODULES | grep "rewrite"
- 测试mod_rewrite重定向是否生效:重启apache服务
访问www.test.com,发现无法显示图片,防盗链成功
- mod_rewrite模板匹配规则表,匹配规则(不匹配即终止)
%{HTTP_REFERER} |
浏览header中的链接字段,存放一个链接的URL,代表是从哪个链接访问所需的网页 |
!^ |
不以后面的字符串开头 |
*$ |
以任意字符结尾 |
NC |
不区分大写 |
R |
强制跳转 |
规则匹配说明
RewriteEngine On:打开网页重写功能
RewriteCond:设置匹配规则
RewriteRule:设置跳转动作
- 隐藏版本信息:Apache的版本信息,透露了一定的漏洞信息,从而给网站带来安全隐患,生产环境中要配置Apache隐藏版本信息
方法:
- 将主配置文件httpd.conf以下行注释去掉
#Include conf/extra/httpd-default.conf
- 修改httpd-default.conf文件两个地方
ServerTokens Full 修改为 ServerTokens Prod
将ServersSignature On 修改为ServersSignature Off
重启httpd服务
通过抓包工具检查网页,发现apache不显示版本,成功
- ServerToken:服务器回送给客户端响应头域是否包含关于服务器OS类型和编译过的模块描述信息
ServerToken输出格式
Prod |
显示服务器名 |
Major |
显示内核版本 |
Minor |
显示主版本 |
OS |
显示次版本 |
Full |
显示详细信息 |