Apache的优化设置
一、实验环境
- 主服务器:192.168.245.120(CentOS 7.6)
- 验证客户机:192.168.245.10(win10)
- 盗链服务器:192.168.245.138(win 7)
- apache版本:httpd-2.4.29.tar.bz
二、实验准备
1、源码安装apache(定制模块)
[root@server opt]# yum -y install gcc gcc-c++ make pcre pcre-devel expat-devel perl zlib-devel <---yum安装所需库
[root@server opt]# ls
apr-1.6.2.tar.gz apr-util-1.6.0.tar.gz httpd-2.4.29.tar.bz2
[root@server opt]#
[root@server opt]# tar xf apr-1.6.2.tar.gz <---解压apr依赖包
[root@server opt]# tar xf apr-util-1.6.0.tar.gz <---解压apr-util依赖包
[root@server opt]# tar xf httpd-2.4.29.tar.bz2 <---解压httpd源码包
[root@server opt]# cd httpd-2.4.29/
./configure \ <---自定义配置
--prefix=/usr/local/httpd \ <---指定安装目录
--enable-so \ <---指定开启so模块
--enable-expires \ <---指定指定开启expires模块(用于图片缓存)
--enable-rewrite \ <---指定开启重写模块(用于防盗链)
--enable-deflate \ <---指定开启deflate模块(用于图片压缩)
--enable-charset-lite \ <---指定字符集
--enable-cgi \ <---指定规范
[root@server httpd-2.4.29]# make && make install <---编译&安装
[root@server httpd-2.4.29]# vim /usr/local/httpd/conf/httpd.conf
ServerName www.cloud.com:80 <---指定域名
Listen 192.168.245.120:80 <---指定ip和监听端口
2、安装并开启DNS服务
[root@server ~]# yum -y install bind
[root@server ~]# vim /etc/named.conf
12 options {
13 listen-on port 53 { any; }; <---修改为any
21 allow-query { any; }; <---修改为any
[root@server ~]# vim /etc/named.rfc1912.zones
zone "cloud.com" IN {
type master;
file "cloud.com.zone";
allow-update { none; };
};
[root@server ~]# cd /var/named/
[root@server named]# cp -p named.localhost cloud.com.zone
[root@server named]# vim cloud.com.zone
$TTL 1D
@ IN SOA @ rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS @
A 127.0.0.1
www IN A 192.168.245.120
[root@server named]# systemctl start named
3、客户机安装HTTP调试抓包工具(fiddler)
4、windows安装IIS服务(web服务)
三、压缩
利用Apache中的gzip模块,我们可以使用gzip压缩算法来对Apache服务器发布的网页内容进行压缩后再传输到客户端浏览器。这样经过压缩后实际上降低了网络传输的字节数,最明显的好处就是可以加快网页加载的速度。
同时支持mod_gzip 和mod_deflate Apache内置有mod_deflate模块来启用gzip功能,但假如安装apache的时候没有编译相关模块,就需要你手动安装一次,以启用它;mod_deflate 是专门为确保服务器的性能而使用的一个压缩模块,mod_deflate 需要较少的资源来压缩文件
第一步:修改apache主配置文件,检查deflate、headers、filter模块是否开启
[root@server httpd-2.4.29]# vim /usr/local/httpd/conf/httpd.conf
LoadModule deflate_module modules/mod_deflate.so
LoadModule headers_module modules/mod_headers.so
LoadModule filter_module modules/mod_filter.so
<IfModule mod_deflate.c> <---具体配置deflate模块
AddOutputFilterByType DEFLATE text/html text/plain text/css text/xml text/javascript <---指定压缩文件的类型
DeflateCompressionLevel 9 <---压缩率, 9是高压缩比
SetOutputFilter DEFLATE <---压缩所有文件
</IfModule>
第二步:检查语法并开启服务
[root@server httpd-2.4.29]# /usr/local/httpd/bin/apachectl -t
Syntax OK
[root@server httpd-2.4.29]# /usr/local/httpd/bin/apachectl
第三步:检查已加载的模块是否有deflate
[root@server httpd-2.4.29]# cd /usr/local/httpd/bin/
[root@server bin]# ./apachectl -t -D DUMP_MODULES |grep "deflate"
deflate_module (shared)
第四步:客户机验证,打开抓包工具
第五步:编辑主页文件,写一行文字,插入一张图片
[root@server bin]# cd /usr/local/httpd/htdocs/
[root@server htdocs]# ls
index.html panda.png
[root@server htdocs]# vim index.html
<html><body><h1>It works!</h1><img src="panda.png"/</body></html>
抓包通过观察headers,可以看到网页经过了压缩
四、缓存
为什么要开启缓存功能?指示资源什么时候过期的时间值(GMT时间),在指定的过期时间前,让浏览器缓存CSS、JS、图片、静态文件等,浏览器可以直接使用自身缓存的版本,而不用向服务器发请求,大大减轻服务器压力。
第一步:修改apache主配置文件,确认expires模块是否开启
[root@server ~]# vim /usr/local/httpd/conf/httpd.conf
LoadModule expires_module modules/mod_expires.so
<IfModule mod_expires.c>
ExpiresActive On <---开启模块
ExpiresDefault "access plus 50 seconds" <---设置最大缓存时间50s
</IfModule>
第二步:检查语法,确认expires模块已加载
[root@server ~]# /usr/local/httpd/bin/apachectl -t
Syntax OK
[root@server ~]# cd /usr/local/httpd/bin/
[root@server bin]# ./apachectl -t -D DUMP_MODULES |grep "expires"
expires_module (shared)
第三步:重启apache服务
[root@server bin]# ./apachectl stop
[root@server bin]# ./apachectl start
第四步:客户机验证,打开抓包工具,访问主页,观察headers
五、防盗链
现在很多网站都是直接使用其它网站上的资源,如果你网站带宽性能不好,很容易给这类网站把流量费光了,下面我来介绍在Apache环境防盗链配置方法,这他们无法直接使用你网站上的资源
第一步:在win7的web服务器上,新建一个主页,写入一句话,插入linux服务器上的图片
<html>
<head></head>
<body>
<h1>this is the test web</h1>
<img src="http://www.cloud.com/panda.png"/> <---地址就用访问URL
</body>
</html>
第二步:编写好以后,改名为html后缀名
第三步:把它放到web服务器的默认主页目录下
这时你访问本服务器的地址,显示了主页内容,此时就盗链了linux服务器上的图片了
第四步:回到linux的web服务器上,修改apache主配置文件,确认开启了rewrite模块并配置规则
[root@server named]# vim /usr/local/httpd/conf/httpd.conf
LoadModule rewrite_module modules/mod_rewrite.so
<Directory "/usr/local/httpd/htdocs">
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://cloud.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://cloud.com$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.cloud.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.cloud.com/$ [NC]
RewriteRule .*\.(gif|png|swf)$ http://www.cloud.com/error.jpg
配置规则变量说明:
1.%{HTTP_ REFERER}: 浏览header中的链接字段,代表是从哪个链接访问所需的网页
2.!^:不以后面的字符串开头
3…*$:以任意字符结尾
4.NC:不区分大写
规则匹配说明:
1.RewriteEngine On:打开网页重写功能
2.RewriteCond:设置匹配规则
3.RewriteRule:设置跳转动作
规则匹配:
1.如果相应变量的值匹配所设置的规则,则逐条往下处理;如果不匹配,则往后的规则不再匹配
第五步:检查rewrite模块是否加载并重启apache服务
[root@server named]# cd /usr/local/httpd/htdocs/
[root@server htdocs]# ls
error.jpg index.html panda.png
//把防盗链跳转的图片error.jpg放进主页目录
[root@server htdocs]# cd ../bin/
[root@server bin]#
[root@server bin]# ./apachectl -t -D DUMP_MODULES | grep "rewrite"
rewrite_module (shared)
[root@server bin]# ./apachectl restart
第六步:客户机验证防盗链成功
六、隐藏版本信息
当远程请求发送到你的 Apache Web 服务器时,在默认情况下,一些有价值的信息,如 web 服务器版本号、服务器操作系统详细信息、已安装的 Apache 模块等等,会随服务器生成的文档发回客户端。
这给攻击者利用漏洞并获取对 web 服务器的访问提供了很多有用的信息。
第一步:修改apache主配置文件,找到httpd-default.conf这一行将最前面的#去掉
[root@server bin]# vim /usr/local/httpd/conf/httpd.conf
Include conf/extra/httpd-default.conf
当前版本的Apache将原来httpd.conf、srm.conf与access.conf中的所有配置参数均放在了配置文件 httpd.conf和conf/extra/httpd-default.conf中,只是为了与以前的版本兼容的原因,而隐藏版本信息的设置是在httpd-default.conf中,所以我们要修改这个配置文件,然后让主配置文件运行时包含它
[root@server bin]# cd ../conf/extra/
[root@server extra]# ls
httpd-autoindex.conf httpd-languages.conf httpd-ssl.conf
httpd-dav.conf httpd-manual.conf httpd-userdir.conf
httpd-default.conf httpd-mpm.conf httpd-vhosts.conf
httpd-info.conf httpd-multilang-errordoc.conf proxy-html.conf
[root@server extra]# vim httpd-default.conf
ServerTokens Prod <---发送给客户端的信息: Server: Apache
ServerSignature Off <---禁用显示服务器名称和版本号的页脚行
ServerTokens
它决定了发送回客户端的服务器响应头字段是否包含服务器操作系统类型的描述和有关已启用的 Apache 模块的信息。
参数含义:
ServerTokens Full (或者不指定)
发送给客户端的信息: Server: Apache/2.4.2 (Unix) PHP/4.2.2 MyMod/1.2
ServerTokens Prod
发送给客户端的信息: Server: Apache
ServerTokens Major
发送给客户端的信息: Server: Apache/2
ServerTokens Minor
发送给客户端的信息: Server: Apache/2.4
ServerTokens Min[imal]
发送给客户端的信息: Server: Apache/2.4.2
ServerTokens OS
发送给客户端的信息: Server: Apache/2.4.2 (Unix)
ServerSignature
这允许在服务器生成的文档(如错误消息、modproxy 的 ftp 目录列表、modinfo 输出等等)下添加一个显示服务器名称和版本号的页脚行。
它有三个可能的值:
On - 允许在服务器生成的文档中添加尾部页脚行,
Off - 禁用页脚行
EMail - 创建一个 “mailto:” 引用;用于将邮件发送到所引用文档的 ServerAdmin。
第二步:重启apache服务
[root@server extra]# cd ..
[root@server conf]# cd ../bin/
[root@server bin]# ./apachectl stop
[root@server bin]# ./apachectl start
第三步:客户机上验证已经隐藏了版本信息