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

Apache 网页与安全优化

程序员文章站 2022-06-25 21:45:02
...
  • 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

  • Modgil 模块与mod_deflate 模块

  • 两者均使用gzip压缩算法,运作原理类似

  • mod_deflate 压缩速度略快,而mod_gzip 的压缩比略高

  • mod_gzip 对服务器CPU的占用要高一些

  • 高流量的服务器,使用mod_deflate 可能会比mod_gzip 加载速度更快

启用网页压缩功能步骤

Apache 网页与安全优化

  • 首先检查是否安装了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标签,从而降低客户端的访问频率和次数,达到减少不必要的流量和增加访问速度的目的

Apache 网页与安全优化

  • 查看是否安装了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,代表是从那个链接访问所需的网页。|
|!^|不以后面的字符串开头|
|.*NCR?010+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 隐藏版本信息可以避免针对版本信息漏洞攻击。
相关标签: Web服务器群集