apache网页与安全优化——压缩、缓存、防盗链及隐藏版本

文章目录

  • Apache网页优化
    • 网页压缩
      • gzip介绍
      • Apache的压缩模块
      • 启用网页压缩功能步骤
      • 配置网页压缩功能
      • 配置网页压缩实验:
    • 网页缓存
      • 启用网页缓存功能步骤
      • 配置网页的缓存时间
      • 配置网页缓存实验:
  • Apache安全优化
    • 防盗链
      • 步骤
      • 配置Apaache实现防盗链
    • 配置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 加载速度更快

启用网页压缩功能步骤

apache网页与安全优化——压缩、缓存、防盗链及隐藏版本_第1张图片

配置网页压缩功能

首先检查是否安装了mod_deflate模块

  • 执行apachectl -t -D DUMP_ _MODUL ES命令
  • 如果输出中没有deflate_module (static),说明编译时没有安装mod_ deflate模块

若没有安装则要重新编译安装

  • ./configure --enable-deflate ……
  • make && make install

配置网页压缩实验:

#首先挂载软件包并进行解压

[root@localhost ~]# mkdir /abc
[root@localhost ~]# mount.cifs //192.168.17.1/share /abc
Password for root@//192.168.17.1/share:  
[root@localhost ~]# cd /abc
[root@localhost abc]# ls
apr-1.6.2.tar.gz       cronolog-1.6.2-14.el7.x86_64.rpm  httpd-2.4.29.tar.bz2  LAMP.txt
apr-util-1.6.0.tar.gz  Discuz_X2.5_SC_UTF8.zip           httpd-2.4.2.tar.gz    mysql-5.6.26.tar.gz
awstats-7.6.tar.gz     extundelete-0.2.4.tar.bz2         john-1.8.0.tar.gz     php-5.6.11.tar.bz2
[root@localhost abc]# tar zxvf apr-1.6.2.tar.gz -C /opt
[root@localhost abc]# tar zxvf apr-util-1.6.0.tar.gz -C /opt
[root@localhost abc]# tar jxvf httpd-2.4.29.tar.bz2 -C /opt
[root@localhost abc]# cd /opt
[root@localhost opt]# ls
apr-1.6.2  apr-util-1.6.0  httpd-2.4.29  rh
[root@localhost opt]# mv apr-1.6.2/ httpd-2.4.29/srclib/apr
[root@localhost opt]# mv apr-util-1.6.0/ httpd-2.4.29/srclib/apr-util
[root@localhost opt]# ls
httpd-2.4.29  rh
[root@localhost opt]# cd httpd-2.4.29/

#安装语言包

[root@localhost httpd-2.4.29]# yum install -y gcc gcc-c++ pcre-devel pcre expat-devel

#执行安装功能模块

[root@localhost httpd-2.4.29]#./configure \
--prefix=/usr/local/httpd \
--enable-so --enable-rewrite \
--enable-charset-lite \
--enable-cgi \
--enable-deflate
[root@localhost httpd-2.4.29]# make && make install

#在配置httpd.conf中配置开启gzip功能

[root@localhost httpd-2.4.29]# cd /usr/local/httpd/conf
[root@localhost conf]# ls
extra  httpd.conf  magic  mime.types  original
[root@localhost conf]# ln /usr/local/httpd/conf/httpd.conf /etc/httpd.conf
[root@localhost conf]# vim  /etc/httpd.conf        //进入配置文件
…………省略
LoadModule headers_module modules/ mod_headers.so //开启去掉前面#
LoadModule deflate_module modules/ mod_deflate.so 
LoadModule filter module modules/mod filter.so
…………省略


#代表对什么样的内容启用gzip压缩
AddOutputFilterByType DEFLATE text/html text/plain text/css text/xml text/javascript text/jpg text/png
#代表压缩级别
DeflateCompressionLevel 9
#代表启用deflate模块对本站点的输出进行gzip压缩
SetOutputFilter DEFLATE

#语法验证

[root@localhost conf]# /usr/local/httpd/bin/apachectl -t
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain. Set the 'ServerName' directive globally to suppress this message
Syntax OK                             //验证配置文件成功

#启动服务,关闭防火墙

[root@localhost conf]# /usr/local/httpd/bin/apachectl start
[root@localhost conf]# systemctl stop firewalld.service 
[root@localhost conf]# setenforce 0

#网页站点,后期可以在里面添加内容,如图片等

[root@localhost conf]# cd ..
[root@localhost httpd]# ls
bin  build  cgi-bin  conf  error  htdocs  icons  include  lib  logs  man  manual  modules
[root@localhost httpd]# cd htdocs
[root@localhost htdocs]# ls
index.html
[root@localhost htdocs]# cat index.html 

It works!

#使用Fiddler工具抓包,进行对比分析Fiddler工具抓包,进行对比分析

目前只有文字,没有进行压缩

apache网页与安全优化——压缩、缓存、防盗链及隐藏版本_第2张图片

我们现在来添加图片,在进行访问并抓包查看

[root@localhost htdocs]# cd /abc
[root@localhost abc]# ls
apr-1.6.2.tar.gz       awstats-7.6.tar.gz                Discuz_X2.5_SC_UTF8.zip    httpd-2.4.29.tar.bz2  john-1.8.0.tar.gz  mysql-5.6.26.tar.gz  ty.jpg
apr-util-1.6.0.tar.gz  cronolog-1.6.2-14.el7.x86_64.rpm  extundelete-0.2.4.tar.bz2  httpd-2.4.2.tar.gz    LAMP.txt           php-5.6.11.tar.bz2
[root@localhost abc]# cp ty.jpg /usr/local/httpd/htdocs/
[root@localhost abc]# cd /usr/local/httpd/htdocs/
[root@localhost htdocs]# ls
index.html  ty.jpg
[root@localhost htdocs]# vim index.html 

It works!

重新访问并查看
apache网页与安全优化——压缩、缓存、防盗链及隐藏版本_第3张图片

网页缓存

  • 通过mod_expire模块配置Apache ,使网页能在客户端浏览器缓存一段时间,以避免重复请求

  • 启用mod_expire模块后,会自动生成页面头部信息中的Expires标签和cache-control标签,从而降低客户端的访问频率和次数,达到减少不必要的流量和增加访问速度的目的

启用网页缓存功能步骤

apache网页与安全优化——压缩、缓存、防盗链及隐藏版本_第4张图片

配置网页的缓存时间

查看是否安装了mod_expire模块

  • /usr/local/apache/bin/apachectl -t -D DUMP_MODULES
  • 如果输出中没有expires_module (static) ,则说明编译时没有安装mod_expires

如果没有安装则要重新编译安装

  • ./configure --enable-expires ……

  • make && make install

配置网页缓存实验:

#安装语言包

[root@localhost ~]# yum install -y gcc gcc-c++ pcre pcre-devel zlib-devel expat-devel perl make

#挂载及解压安装包

[root@localhost ~]# mkdir /abc
[root@localhost ~]# mount.cifs //192.168.17.1/share /abc
Password for root@//192.168.17.1/share:  
[root@localhost abc]# tar zxvf apr-1.6.2.tar.gz -C /opt
[root@localhost abc]# tar zxvf  apr-util-1.6.0.tar.gz -C /opt
[root@localhost abc]# tar zxvf  httpd-2.4.29.tar.gz -C /opt
[root@localhost abc]# cd /opt
[root@localhost opt]# ls
apr-1.6.2  apr-util-1.6.0  httpd-2.4.2  rh
[root@localhost opt]# mv apr-1.6.2/ httpd-2.4.2/srclib/apr
[root@localhost opt]# mv apr-util-1.6.0/ httpd-2.4.2/srclib/apr-util

#执行安装模块并进行编译

[root@localhost opt]# cd httpd-2.4.2
[root@localhost httpd-2.4.2]# ./configure \
--prefix=/usr/local/httpd \
--enable-deflate \
--enable-expires \
--enable-so \
--enable-rewrite \
--enable-charset-lite \
--enable-cgi 

[root@localhost httpd-2.4.2]# make && make install

#复制httpd启动脚本并添加35级别自动运行

[root@localhost httpd-2.4.2]# cp /usr/local/httpd/bin/apachectl /etc/init.d/httpd
[root@localhost httpd-2.4.2]# vim /etc/init.d/httpd
# chkconfig: 35 85 21                     //35级别自动运行  第85个启动 第21个关闭
# description: Apache is a World Wide Web server
[root@localhost httpd-2.4.2]# chkconfig --add httpd            //将httpd加入到SERVICE管理器
[root@localhost httpd-2.4.2]# chkconfig --level 35 httpd on

#切换至主配置文件进行配置

[root@localhost httpd-2.4.2]# cd /usr/local/httpd/conf
[root@localhost conf]# ls
extra  httpd.conf  magic  mime.types  original
[root@localhost conf]# ln -s /usr/local/httpd/conf/httpd.conf  /etc/    //建立软链接便于管理
[root@localhost conf]# ln -s /usr/local/httpd/bin/* /usr/local/bin/  //建立软链接便于管理命令
[root@localhost conf]# vim /etc/httpd.conf 
Listen 192.168.17.139:80
#Listen 80
ServerName kgc.example.com:80
LoadModule expires_module modules/mod_expires.so          //开启缓存模块  去掉前面#
                        //配置文件末尾添加启用mod_expires模块并设置
   ExpiresActive On
   ExpiresDefault "access plus 50 seconds"

[root@localhost conf]# apachectl -t                //验证语法
Syntax OK

#关闭防火墙并启用服务

[root@localhost conf]# systemctl stop firewalld
[root@localhost conf]# setenforce 0
[root@localhost conf]# service httpd start

#验证缓存最大秒数,设置的最大缓存时间50s
apache网页与安全优化——压缩、缓存、防盗链及隐藏版本_第5张图片

Apache安全优化

防盗链

  • 防盗链就是防止别人的网站代码里面盗用服务器的图片、文件、视频等相关资源

  • 如果别人盗用网站的这些静态资源,明显的是会增大服务器的带宽压力

  • 所以作为网站的维护人员,要杜绝我们服务器的静态资源被其他网站盗用

使用两台主机模拟盗链

IP地址 域名 用途
192.168.17.140 www.kgc.com 源主机
192.168.17.134 www.dl.com 盗链网站

步骤

检查Apache是否安装了mod_rewrite模块

  • /usr/local/apache/bin/apachectl -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.jpg

配置Apaache实现防盗链

#安装语言包

[root@localhost ~]# yum install -y gcc gcc-c++ pcre pcre-devel zlib-devel expat-devel perl make

#挂载及解压安装包

[root@localhost ~]# mkdir /abc
[root@localhost ~]# mount.cifs //192.168.17.1/share /abc
Password for root@//192.168.17.1/share:  
[root@localhost abc]# tar zxvf apr-1.6.2.tar.gz -C /opt
[root@localhost abc]# tar zxvf  apr-util-1.6.0.tar.gz -C /opt
[root@localhost abc]# tar zxvf  httpd-2.4.2.tar.gz -C /opt
[root@localhost abc]# cd /opt
[root@localhost opt]# ls
apr-1.6.2  apr-util-1.6.0  httpd-2.4.2  rh
[root@localhost opt]# mv apr-1.6.2/ httpd-2.4.2/srclib/apr
[root@localhost opt]# mv apr-util-1.6.0/ httpd-2.4.2/srclib/apr-util

#执行安装模块并进行编译

[root@localhost opt]# cd httpd-2.4.2/
[root@localhost httpd-2.4.2]# ./configure \
--prefix=/usr/local/httpd \
--enable-deflate \
--enable-so \
--enable-rewrite \
--enable-charset-lite \
--enable-cgi

[root@localhost httpd-2.4.2]# make && make install

#复制httpd启动脚本并添加35级别自动运行

[root@localhost httpd-2.4.2]# cp /usr/local/httpd/bin/apachectl /etc/init.d/httpd
[root@localhost httpd-2.4.2]# vim /etc/init.d/httpd
# chkconfig: 35 85 21                     //35级别自动运行  第85个启动 第21个关闭
# description: Apache is a World Wide Web server
[root@localhost httpd-2.4.2]# chkconfig --add httpd            //将httpd加入到SERVICE管理器
[root@localhost httpd-2.4.2]# chkconfig --level 35 httpd on

#切换至主配置文件进行配置

[root@localhost httpd-2.4.2]# cd /usr/local/httpd/conf
[root@localhost conf]# ls
extra  httpd.conf  magic  mime.types  original
[root@localhost conf]# ln -s /usr/local/httpd/conf/httpd.conf  /etc/    //建立软链接便于管理
[root@localhost conf]# ln -s /usr/local/httpd/bin/* /usr/local/bin/  //建立软链接便于管理命令
[root@localhost conf]# vim /etc/httpd.conf 
Listen 192.168.17.139:80
#Listen 80
ServerName kgc.example.com:80
[root@localhost conf]# apachectl -t                //验证语法
Syntax OK

#关闭防火墙并启用服务

[root@localhost conf]# systemctl stop firewalld
[root@localhost conf]# setenforce 0
[root@localhost conf]# service httpd start

#安装bind,启用dns

[root@localhost ~]# yum install -y bind
[root@localhost ~]#vim /etc/named.conf 
options {
        listen-on port 53 { any; };
        listen-on-v6 port 53 { ::1; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        recursing-file  "/var/named/data/named.recursing";
        secroots-file   "/var/named/data/named.secroots";
        allow-query     { any; };
[root@localhost ~]# vim /etc/named.rfc1912.zones 
zone "kgc.com" IN {
        type master;
        file "kgc.com.zone";
        allow-update { none; };
};

[root@localhost ~]# cd /var/named/
[root@localhost named]# ls
data  dynamic  named.ca  named.empty  named.localhost  named.loopback  slaves
[root@localhost named]# cp -p named.localhost kgc.com.zone
[root@localhost named]# vim kgc.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.17.140
[root@localhost named]# systemctl start named                             

#盗链端配置

安装软件

[root@localhost ~]# yum install -y httpd
[root@localhost ~]# echo "nameserver 192.168.17.140" > /etc/resolv.conf    //添加DNS地址
[root@localhost ~]# cd /var/www/html/
[root@localhost html]# ls
[root@localhost html]# vim index.html                  //建立网站站点并引用源主机图片url

 

It test!accp

[root@localhost html]# vim /etc/httpd/conf/httpd.conf //配置主配置文件 Listen 192.168.17.134:80 ServerName www.accp.com:80

#关闭防火墙闭并开启服务

[root@localhost html]# systemctl stop firewalld.service 
[root@localhost html]# setenforce 0
[root@localhost html]# systemctl start httpd

#这时其他主机可以自由盗取调用网站图片等静态资源

apache网页与安全优化——压缩、缓存、防盗链及隐藏版本_第6张图片

apache网页与安全优化——压缩、缓存、防盗链及隐藏版本_第7张图片

#再次到主机源主配置文件进行配置防盗链

[root@localhost ~]# vim /etc/httpd.conf
LoadModule rewrite_module modules/mod_rewrite.so     //开启rewrite功能

             //启用防盗链功能并设置规则
   Options Indexes FollowSymLinks
…………
   AllowOverride None
…………
   Require all grabted
 …………  
   RewriteEngine On
   RewriteCond %{HTTP_REFERER} !^http://kgc.com/.*$ [NC]
   RewriteCond %{HTTP_REFERER} !^http://kgc.com$ [NC]
   RewriteCond %{HTTP_REFERER} !^http://www.kgc.com/.*$ [NC]
   RewriteCond %{HTTP_REFERER} !^http://www.kgc.com/$ [NC]
   RewriteRule .*\.(gif|jpg|swf)$ http://www.kgc.com/error.jpg


[root@localhost ~]# service httpd restart           //重启服务

#再次测试,盗链端再次查看

apache网页与安全优化——压缩、缓存、防盗链及隐藏版本_第8张图片apache网页与安全优化——压缩、缓存、防盗链及隐藏版本_第9张图片

配置Apache隐藏版本信息

  • Apache的版本信息,透露了一定的漏洞信息,从而给网站带来安全隐患
  • 生产环境中要配置Apache隐藏版本信息
  • 可使用Fiddler抓包工具分析

配置Apache隐藏版本信息

  • 将主配置文件httpd.conf以下行注释去掉。

    #Include conf/extra/httpd-default.conf

  • 修改httpd-default.conf文件两个地方

  • ServerTokens Full修改为Server Tokens Prod

  • 将ServersSignature On修改为ServersSignature Off

配置隐藏版本

#目前未进行隐藏版本配置,先进行抓包测试

apache网页与安全优化——压缩、缓存、防盗链及隐藏版本_第10张图片
#现在我们进行隐藏版本配置,进入主配置文件

[root@localhost htdocs]# vim /etc/httpd.conf
Include conf/extra/httpd-default.conf              //开启   去掉前面的#号

#进入子配置文件

[root@localhost htdocs]# cd /usr/local/httpd/
[root@localhost httpd]# ls
bin  build  cgi-bin  conf  error  htdocs  icons  include  lib  logs  man  manual  modules
[root@localhost httpd]# cd conf
[root@localhost conf]# ls
extra  httpd.conf  magic  mime.types  original
[root@localhost conf]# cd extra/
[root@localhost 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@localhost extra]# vim httpd-default.conf           //进入子配置文件
ServerTokens Prod                            //FULL 改为 Prod 只显示名称不显示版本号 
ServerSignature Off                         //设为OFF
[root@localhost extra]# service httpd restart          //重启服务

#隐藏版本配置完成,再次进行抓包测试

apache网页与安全优化——压缩、缓存、防盗链及隐藏版本_第11张图片
现在版本号就已经隐藏了,只显示apache,而一般情况下,每个版本都会有一些隐藏的bug,而隐藏版本号也就从另一方面,间接性的起到了安全防空的作用

你可能感兴趣的:(Web服务器群集)