理论+实验·Apache网页优化,提升效率,添加防盗链,隐藏apache版本号
理论+实验·Apache网页优化,提升效率,添加防盗链,隐藏apache版本号
文章目录
Apache网页优化概述
优化概述
在企业中,部署Apache后只采用默认的配置参数,会引发网站很多问题,换言之默认配置是针对以前较低的服务器配置的,以前的配置已经不适用当今互联网时代
为了适应企业需求,就需要考虑如何提升Apache的性能与稳定性,这就是Apache优化的内容
优化内容
配置网页压缩功能
配置网页缓存
工作模式的选择与参数优化
配置隐藏版本号
配置防盗链
…
gzip介绍
介绍
配置Apache的网页压缩功能,是使用gzip压缩算法来对网页内容进行压缩后再传输到客户端浏览器
作用
降低了网络传输的字节数,加快网页加载的速度
节省流量,改善用户的浏览体验
gzip与搜索引擎的抓取工具有着更好的关系
Apache的压缩模块
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:看是否安装mod deflate模块
2:修改配置文件启用压缩功能
3:访问测试
在配置httpd.conf中配置开启gzip功能
#设置对什么样的内容启用gzip压缩
AddOutputFilterByType DEFLATE text/html text/plaintext/css text/xml textjavascript
#压缩级别
DeflateCompressionLevel
#启用deflate模块对本站点的输出进行gzip压缩
SetOutputFilter DEFLATE
重启Apache服务,再用火狐浏览器访问测试网站
在浏览器中选择“查看元素”可以看到有“Accept-Encoding:gzip"表示压缩已经生效
配置网页的缓存时间
通过mod_expire模块配置Apache,使网页能在客户端浏览器缓存一段时间,以避免重复请求
启用mod_expire模块后,会自动生成页面头部信息中的Expires标签和Cache-Contro1标签,从而降低客户端的访问频率和次数,达到减少不必要的流量和增加访问速度的目的
启用网页缓存功能步骤
1:查看是否安装mod expire模块
2:修改配置文件,启用缓存功能
3:访问测试
查看是否安装了mod_expire模块
/usr/local/apache/bin/apachectl -t-D DUMP_ MODULES
如果输出中没有expires_module (static),则说明编译时没有安装mod_expires
如果没有安装,需要重新编译安装
./configure --enable-expires…
make && make install
修改httpd.conf配置文件
启用mod-expires模块,并设置http协议下任意格式的文档均60秒后过期
ExpiresActive On
ExpiresDefault “access plus 60 seconds”
重启httpd服务
重启Apache服务,再用火狐浏览器访问测试网站
在浏览器中选择“查看元素"可以看到有"Expires"项表示缓存生效
实验环境
CentOS 7.6 ===>需要编译安装
Win 10 ===>安装fiddler软件监控
实验步骤
#解压缩源码包
[aaa@qq.com opt]# tar -jxvf httpd-2.4.29.tar.bz2
[aaa@qq.com opt]# tar -zxvf apr-1.6.2.tar.gz
[aaa@qq.com opt]# tar -zxvf apr-util-1.6.0.tar.gz
#移动解压后的源码
[aaa@qq.com opt]# mv apr-1.6.2 httpd-2.4.29/srclib/apr
[aaa@qq.com opt]# mv apr-util-1.6.0 httpd-2.4.29/srclib/apr-util
#安装后续所需的软件环境
[aaa@qq.com opt]# yum -y install gcc-c++ \
gcc \
make \
zlib-devel \ ===>网页压缩需要用到的开发环境
pcre-devel \
expat-devel \
perl
#进入目录设置安装目录并配置信息
[aaa@qq.com opt]# cd httpd-2.4.29/
[aaa@qq.com httpd-2.4.29]# ./configure \
--prefix=/usr/local/httpd \
--enable-deflate \ ===>网页压缩
--enable-expires \ ===>网页缓存
--enable-so \
--enable-rewrite \
--enable-charset-lite \
--enable-cg
#编译安装
[aaa@qq.com httpd-2.4.29]# && make install
#修改配置文件
[aaa@qq.com httpd-2.4.29]# vim /usr/local/httpd/conf/httpd.conf
......
ServerName www.test.com:80 ===>注释去掉,example改成test
......
Listen 20.0.0.26:80 ===>注释去掉改成20.0.0.26
#Listen 80 ===>加注释
......
LoadModule deflate_module modules/mod_deflate.so ===>注释去掉
......
LoadModule expires_module modules/mod_expires.so ===>注释去掉
......
<IfModule mod_deflate.c> ===>追加写入(网页压缩)
AddOutputFilterByType DEFLATE text/html text/plain text/css text/xml text/javascript text/jpg text/png
DeflateCompressionLevel 9
SetOutputFilter DEFLATE
</IfModule>
<IfModule mod_expires.c> ===>追加写入(网页缓存)
ExpiresActive On
ExpiresDefault "access plus 300 seconds"
</IfModule>
#验证语法错误
[aaa@qq.com httpd-2.4.29]# /usr/local/httpd/bin/apachectl -t
Syntax OK ===>表示语法没有问题
#验证模块的开启
[aaa@qq.com httpd-2.4.29]# /usr/local/httpd/bin/apachectl -t -D DUMP_MODULES | grep "deflate"
deflate_module (shared) ===>表示已开启
[aaa@qq.com httpd-2.4.29]# /usr/local/httpd/bin/apachectl -t -D DUMP_MODULES | grep "expires"
expires_module (shared) ===>表示已开启
#修改网页html文件
[aaa@qq.com opt]# cd /usr/local/httpd/htdocs/ ===>找一张图片放入该目录
[aaa@qq.com htdocs]# vim index.html
<h1>this is test web</h1>
<img src="test.jpg"/> ===>图片名称test.jpg
#关闭防火墙,关闭核心防护,开启服务,验证服务的开启
[aaa@qq.com htdocs]# systemctl stop firewalld
[aaa@qq.com htdocs]# setenforce 0
[aaa@qq.com htdocs]# /usr/local/httpd/bin/apachectl
[aaa@qq.com htdocs]# netstat -antp | grep httpd
tcp 0 0 20.0.0.26:80 0.0.0.0:* LISTEN 113136/httpd
实验结果
Win 10上面安装fiddler软件抓包测试
配置Apache实现防盗链
防盗链是防止别人的网站代码里面盗用我们自己服务器上的图片、文件、视频等相关资源
如果别人盗用网站的这些静态资源,明显的是会增大服务器的带宽压力
作为网站的维护人员,要杜绝服务器的静态资源被其他网站盗用
使用三台主机模拟盗链
三台主机配置与功能
IP地址 | 域名 | 用途 |
---|---|---|
192.168.2.19 | www.test.com | 源主机 |
192.168.2.4 | www.dt.com | 盗链网站 |
客户端 | Windows 10 | 浏览器 |
盗链模拟步骤
1:两台主机配置测试页面
2:盗链网站的测试网页,盗用源主机网站目录下的一个test.jpg文件
3:在Windows中访问验证
检查Apache是否安装了mod-rewrite模块
/usr/local/apache/bir/lapachectl -t-D DUMP MODULES
如果输出中没有rewrite-module (static),则说明编译时没有安装mod_rewrite模块
如果没有安装,需要重新编译安装
./configure–enable-rewrite…
make &&make install
配置规则变量说明
%{HTTP REFERER):浏览header中的链接字段,存放一个链接的URL,代表是从哪个链接访问所需的网页
!^:不以后面的字符串开头
.*$:以任意字符结尾
NC:不区分大写
R:强制跳转
规则匹配说明
RewriteEngine On:打开网页重写功能
RewriteCond:设置匹配规则
RewriteRule:设置跳转动作
规则匹配
如果相应变量的值匹配所设置的规则,则逐条往下处理;如果不匹配,则往后的规则不再匹配
配置操作演示
修改配置文件启用防盗链功能并设置规则
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://test.com/.*$ [NC]
RewriteCond %{HTTP_REFERER) !^http://test.com$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.test.com/.*$[NC]
RewriteCond %{HTTP_REFERER) !^http://www.test.com$ [NC]
RewriteRule .*\.(gif|jpg|swf)$ http://www.test.com/error.png
配置Apache隐藏版本信息
Apache的版本信息,透露了一定的漏洞信息,从而给网站带来安全隐患
生产环境中要配置Apache隐藏版本信息
配置Apache隐藏版本信息
将主配置文件httpd.conf以下行注释去掉
#lnclude conf/extra/httpd-default.conf
修改httpd-default.conf文件
ServerTokens Full修改为ServerTokens Prod
重启httpd服务,访问验证
实验环境
CentOS 7.6 两台 (IP 20.0.0.20;20.0.0.21)
Win 10
实验步骤
在20.0.0.21上配置
#解压源码包
[aaa@qq.com opt]# tar jxvf httpd-2.4.29.tar.bz2
[aaa@qq.com opt]# tar zxvf apr-1.6.2.tar.gz
[aaa@qq.com opt]# tar zxvf apr-util-1.6.0.tar.gz
#移动解压后的源码包
[aaa@qq.com opt]# mv apr-1.6.2 httpd-2.4.29/srclib/apr
[aaa@qq.com opt]# mv apr-util-1.6.0 httpd-2.4.29/srclib/apr-util
#进入源码包内
[aaa@qq.com opt]# cd httpd-2.4.29/
#安装后续所需的软件环境
[aaa@qq.com httpd-2.4.29]# yum -y install gcc-c++ \
gcc \
make \
zlib-devel \
pcre-devel \
expat-devel \
perl
#设置安装目录及开启一些功能
[aaa@qq.com httpd-2.4.29]# ./configure \
--prefix=/usr/local/httpd \
--enable-so \
--enable-rewrite \
--enable-charset-lite \
--enable-cg
#编译安装
[aaa@qq.com httpd-2.4.29]# make && make install
#拷贝一下方便操作
[aaa@qq.com httpd-2.4.29]# cp /usr/local/httpd/bin/apachectl /etc/init.d/httpd
#建立软链接
[aaa@qq.com httpd-2.4.29]# ln -s /usr/local/httpd/conf/httpd.conf /etc/
[aaa@qq.com httpd-2.4.29]# ln -s /usr/local/httpd/bin/* /usr/local/bin/
#修改配置文件
[aaa@qq.com httpd-2.4.29]# vim /etc/httpd.conf
......
Listen 20.0.0.21:80
#Listen 80
......
ServerName www.test.com:80
......
LoadModule rewrite_module modules/mod_rewrite.so
......
Require all granted
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://test.com/.*$[NC]
RewriteCond %{HTTP_REFERER) !^http://test.com$[NC]
RewriteCond %{HTTP_REFERER} !^http://www.test.com/.*$[NC]
RewriteCond %{HTTP_REFERER) !^http://www.test.com$[NC]
RewriteRule .*\.(gif|jpg|swf)$ http://www.test.com/error.jpg
......
lnclude conf/extra/httpd-default.conf ===>注释去掉
......
#修改httpd-default.conf
[aaa@qq.com httpd-2.4.29]# cd /usr/local/httpd/conf/extra
[aaa@qq.com extra]# vim httpd-default.conf
ServerTokens Full修改为ServerTokens Prod ===>实现隐藏apapche版本信息
#修改网页
[aaa@qq.com httpd-2.4.29]# vim /usr/local/httpd/htdocs/index.html
<html><body><h1>It works!</h1></body></html>
<img src="test.jpg"/> 需将图片放入htdocs目录下
#关闭核心防护,关闭防火墙,开启服务
[aaa@qq.com htdocs]# setenforce 0
[aaa@qq.com htdocs]# systemctl stop firewalld
[aaa@qq.com htdocs]# service httpd start
#安装DNS
[aaa@qq.com htdocs]# yum -y install bind
#修改主配置文件
[aaa@qq.com htdocs]# vim /etc/named.conf
......
listen-on port 53 { any; };
......
allow-query { any; };
#修改区域配置文件
[aaa@qq.com htdocs]# vim /etc/named.rfc1912.zones
...... 添加这几行
zone "test.com" IN {
type master;
file "test.com.zone";
allow-update { none; };
};
#修改区域数据配置文件
[aaa@qq.com htdocs]# cp -p /var/named/named.localhost /var/named/test.com.zone
[aaa@qq.com htdocs]# vim /var/named/test.com.zone
...... 追加这一行信息
www IN A 20.0.0.21
#开启服务
[aaa@qq.com htdocs]# systemctl start named
在20.0.0.20上配置
#安装httpd
[aaa@qq.com ~]# yum -y install httpd
#修改配置文件
[aaa@qq.com ~]# vim /etc/httpd/conf/httpd.conf
......
Listen 20.0.0.20:80
#Listen 80
......
ServerName www.dt.com:80
#配置网页
[aaa@qq.com ~]# vim /var/www/html/index.html
<h1>this is dt web</h1>
<img src="http://www.test.com/test.jpg"/>
#开启服务,关闭核心防护,关闭防火墙
[aaa@qq.com ~]# systemctl restart httpd
[aaa@qq.com ~]# setenforce 0
[aaa@qq.com ~]# systemctl stop firewalld
实验结果
在win 10 浏览器上输入"20.0.0.20"
在win 10 浏览器上输入"www.test.com"可以看到已经隐藏了apache的版本号