- Apache 网页优化
-
网页压缩
-
网页缓存
- Apache 安全优化
-
配置防盗链
-
隐藏版本信息
Apache 网页优化概述
- 在企业中,部署Apache后只采用默认的配置参数,会引发网站很多问题,换言之默认配置是针对以前较低的服务器配置的,以前的配置已经不适用当今互联网时代。
- 为了适应企业需求,就需要考虑如何提升Apache 的性能与稳定性。
优化内容
- 配置网页压缩功能
- 工作模式的选择与参数优化
- 配置防盗链
- 配置隐藏版本号
gzip 介绍
-
配置Apache的网页压缩功能,是使用gzip压缩算法来对网页内容进行压缩后再传输到客户端浏览器。
-
作用
-
降低了网络传输的字节数,加快网页加载的速度。
-
节省流量,改善用户的浏览体验。
-
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 加载速度更快
启用网页压缩功能步骤
-
首先检查是否安装了mod_deflate模块
-
执行apachectl -t -D DUMP_MODULES命令
-
如果输出中没有deflate_module (static),说明编译时没有安装mod_deflate模块
-
若没有安装则要重新编译安装
-
./configure --enable-deflate…
-
make && make install
-
在配置httpd.conf中配置开启gzip功能
-
AddOutputFilterByType DEFLATE text/html text/plain text/css text/xml text/javascript
-
DeflateCompressionLevel
-
SetOutputFilter DEFLATE
-
第一行代表对什么样的内容启用gzip压缩
-
第二行代表压缩级别
-
第三行代表启用deflate模块对本站点的输出进行gzip压缩
-
重启Apache服务,抓包查看。
配置网页的缓存时间
- 通过mod_expire模块配置Apache,使网页能在客户端浏览器缓存一段时间,以避免重复请求
- 启用mod_expire模块后,会自动生成页面头部信息中的Expires标签和Cache-Control标签,从而降低客户端的访问频率和次数,达到减少不必要的流量和增加访问速度的目的
-
查看是否安装了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秒后过期
配置Apache 隐藏版本信息
-
Apache的版本信息,透露了一定的漏洞信息,从而给网站带来安全隐患
-
生产环境中要配置Apache隐藏版本信息
-
配置Apache隐藏版本信息
-
将主配置文件httpd.conf以下行注释去掉
-
#Include conf/extra/httpd-default.conf
-
修改httpd-default.conf文件两个地方
-
ServerTokens Full 修改为 ServerTokens Prod
-
将ServersSignature On 修改为ServersSignature Off
-
重启httpd服务,访问网站,抓包测试
显示 Server:Apache,表示版本信息已经被隐藏。ServerTokens 表示服务器回送给客户端的响应头域是否包含关于服务器 OS类型和编译过的模块描述信息,这里设置的是 Prod。
ServerTokens 输出格式
|选项|输出格式|
|-😐-😐
|Prod|Server:Apache|
|Major|Server:Apache/2|
|Minor|Server:Apache/2.0|
|OS|Server:Apache/2.0.41(Unix)|
|Full|Server:Apache/2.0.41(Unix) PHP/4.2.2 MyMod/1.2|
配置Apache实现防盗链
-
防盗链就是防止别人的网站代码里面盗用服务器的图片、文件、视频等相关资源
-
如果别人盗用网站的这些静态资源,明显的是会增大服务器的带宽压力
-
所以作为网站的维护人员,要杜绝我们服务器的静态资源被其他网站盗用
-
**使用两台主机模拟盗链
-
两台主机配置与功能如下
IP地址 | 域名 | 用途 |
---|---|---|
192.168.2.19 | www.kxr.com | 源主机 |
192.168.2.4 | www.dt.com | 盗链网站 |
- 盗链模拟步骤
- 两台主机配置测试页面
- 盗链网站的测试网页page盗用源主机目录page/image的一个logo.jpg文件
- 抓包查看。
Apache 防盗链配置
- Apache 防盗链需要安装 mod_rewrite模块,
- ** (1) 检查是否安装了 mod_rewrite 模块**
apachectl -t -D DUMP_MODULES | grep "rewrite"
ss -lnt | grep httpd //另一种查询命令
- ** (2) 安装 mod_rewrite 模块
- 重新编译安装 Apache,在参数中加入 mod_rewrite 模块内容
service httpd stop
./confingure
--prefix=/usr/local/httpd
--enable-deflata
--enable-so
--enable-rewrite
--enable-charset-lite
--enable-cgi
make && make install
- ** (3) 配置 mod_rewrite 模块启用
- 编译安装后,mod_rewrite 模块需要在 httpd.conf 文件启用后才能生效。
vim httpd.conf
<Directory "/usr/local/httpd/htdocs">
#Controls who can get stuff from this server.
#
Order allow,deny
Allow from all
RewriteEngine On //加入 mod_rewrite 模块内容
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.html [R,NC]
</Directory>
- ** (4) 检查 httpd.conf 语法
apachectl -t
Syntax OK
- 重启 Apache服务器
systemctl restart httpd
ss -lnt | grep "rewrite"
rewrite_module(static)
mod_rewrite 模块主要的功能
- 实现URL的跳转,它的正则表达式基于 Perl语言,有基于服务器级的(httpd.conf)和目录级的(.htaccess)两种方式。
- 基于服务器级的有两种方法,一种是在 httpd.conf的全局下直接利用 RewriteEngine on 来打开 rewrite功能;另一种是在局部里利用 RewriteEngine on 来打开 rewrite 功能。
- 基于目录级的则要注意一点,就是必须打开此目录的 FollowSymLinks 属性且在 .htaccess 里声明 RewriteEngine on。
- 开启 rewrite功能后,需要设置 RewriteCond 指令,它定义了匹配规则,如果符合某个或某几个规则,则执行 RewriteCond 下面紧邻的 RewriteRule指令;如果不匹配,则后面的规则不再匹配,RewriteRule 定义需要重定向到的路径。
匹配规则表
|规则|描述|
|-😐-😐
|%{HTTP_PEFERER}|浏览 header中的链接字段,存放一个链接的 URL,代表是从那个链接访问所需的网页。|
|!^|不以后面的字符串开头|
|.*
∣
以
任
意
字
符
结
尾
∣
∣
N
C
∣
不
区
分
大
小
写
∣
∣
R
∣
强
制
跳
转
∣
∣
?
∣
匹
配
0
到
1
个
字
符
∣
∣
∗
∣
匹
配
0
到
多
个
字
符
∣
∣
+
∣
匹
配
1
到
多
个
字
符
∣
∣
∣
字
符
串
开
始
标
志
∣
∣
|以任意字符结尾| |NC|不区分大小写| |R|强制跳转| |?|匹配 0到 1个字符| |*|匹配 0到多个字符| |+|匹配 1到多个字符| |^|字符串开始标志| |
∣以任意字符结尾∣∣NC∣不区分大小写∣∣R∣强制跳转∣∣?∣匹配0到1个字符∣∣∗∣匹配0到多个字符∣∣+∣匹配1到多个字符∣∣∣字符串开始标志∣∣|字符串结束标志|
|.|匹配任何单字符|
-
首先 RewriteEngine On 打开了重写引擎,根据匹配规则我门分析 “RewriteCond %{HTTP_REFERER} !^http://test.com/.$ [NC] ” 的含义。
① “RewriteCond %{HTTP_REFERER} ”:表示从哪个 URL来产生请求。
② “ !^ ”:不是以后面的字符串开头。
③ “ http://test.com/ ”:是本网站的路径,按整个字符串匹配。
④ “ . $ ”:表示以任意字符结尾。
⑤ “ NC ”:不区分大小写字母。 -
最后的规则是:不以 “httpd://test.com” 为路径,即不是本网站进行访问,后面是任意字符都可以匹配成功。
-
如果请求路径被匹配,执行重定向指令 “RewriteRule .* .(gif|jpg|swf)$ http://www.test.com/error.html [R,NC]” 。
① “ . ” :匹配一个字符。
② “ * ” :匹配 0到多个字符,与“.” 合起来的意思是匹配 1到多个字符,实际上可以只用 “+”表示。
③ “ .” :表示转义,
④ “(gif|jpg|swf)”:表示匹配 “gif” “jpg” “swf” 任意一种, “$” 表示结束。最后的规则是以 “.gif” “.jpg”
“.swf” 结尾,前面是 1到多个字符的字符串,也就是匹配图片类型文件。
⑤ “http://www.test.com/error.png ” :表示转发到这个路径。
- 整个配置的含义是:本网站以外的站点访问本站的图片文件时,显示 error.png 这个图片。
总结
- Apache 网页压缩可以减少服务器流量,提升服务器性能,使用 mod_deflate 模块实现。
- Apache 网页缓存可以把网页缓存在客户端,对于不经常更新的页面客户端不需要再向服务器发出请求,能节省流量,使用 mod_expires 模块实现。
- Apache 防盗链可以防止其他站点使用本网站资源,避免不必要的流量开销,使用 mod_rewrite 模块实现。
- Apache 隐藏版本信息可以避免针对版本信息漏洞攻击。