欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

理论+实验·Apache网页优化,提升效率,添加防盗链,隐藏apache版本号

程序员文章站 2022-06-26 12:53:52
...

理论+实验·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网页优化,提升效率,添加防盗链,隐藏apache版本号

配置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"

理论+实验·Apache网页优化,提升效率,添加防盗链,隐藏apache版本号
在win 10 浏览器上输入"www.test.com"可以看到已经隐藏了apache的版本号

理论+实验·Apache网页优化,提升效率,添加防盗链,隐藏apache版本号