Apache 网页与安全优化

  • 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.19www.kxr.com源主机
192.168.2.4www.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到多个字符| |^|字符串开始标志| | NCR?010+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 隐藏版本信息可以避免针对版本信息漏洞攻击。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值