Apache网页优化

网页压缩与缓存

        网页压缩

(1)gzip(压缩效率高,对cpu占用较大)

  • 一种流行的文件压缩算法,大约可以减少70%以上的文件大小。利用Apache的gzip模块可使用该算法对网页内容进行压缩后再传输给客户端浏览器,从而加快网页加载速度

(2)HTTP压缩过程

  1. 服务器接收到HTTP请求后,先检查浏览器是否支持压缩(Accept-Encoding信息)
  2. 如果支持,服务器将检查请求文件的后缀,如HTML,CSS等静态文件,服务器会在压缩缓存目录中查找是否存在最新的压缩文件
  3. 如果不存在最新压缩文件,服务器会返回未压缩的请求文件,并在缓存目录中存放该请求的压缩文件
  4. 如果存在新压缩文件,则直接返回请求的压缩文件⑤如果请求是动态文件,则服务器会动态压缩内容并返回浏览器,但内容不会存放到缓存目录中

(3)Apache的压缩模块(对cpu消耗小,压缩效率没有gzip高)

  1. Apache 1.x系列没有内江网页压缩技术,使用的是第三方mod_gzip模块进行压缩
  2. 2.x系列内建了mod_deflate模块来取代mod_gzip
  3. mod_gzip对服务器cpu占用更高,但压缩效率更高

(3.5)动态添加mod_deflate 模块

//检查是否安装有mod_deflate模块
[root@www ~]# apachectl -t -D DUMP_MODULES | grep deflate

//安装Apache时启用此功能
//安装时编译 Apache源码 添加 mod_deflate 模块
[root@apache ~]# tar zxf httpd-2.4.25.tar.gz
[root@apache ~]# cd httpd-2.4.25/ 
[root@apache ttpd-2.4.25]#./configure \
--prefix=/usr/local/httpd \
--enable-so --enable-rewrite \
--enable-charset-lite \
--enable-cgi --enable-deflate
[root@apache ttpd-2.4.25]#./configure --prefix=/usr/local/httpd --enable-so --enable-rewrite --enable-charset-lite --enable-cgi --enable-deflate
[root@apache httpd-2.4.25]#make && make install         //编译
[root@apache httpd-2.4.25]#ln -s /usr/local/httpd/bin/* /usr/local/bin        //软连接

//如果安装时没有配置,则需要动态安装
[root@apache ~]cd /httpd-2.4.25/modules/filters
//使用apxs工具安装
[root@localhost filters]# apxs -i -c -a mod_deflate.c
i:安装模块。将编译后的模块安装到 Apache 服务器中
c:编译模块。将源代码文件(这里是mod deflate.c)编译成共亨对象文件(.so文件)
a:自动激活模块。编译并安装模块后,立即启用它,不需要手动编辑配置文件

(4)配置mod_deflate 模块

//配置mod_deflate模块启动
[root@localhost htdocs]# vim /usr/local/httpd/conf/httpd.conf

LoadModule deflate_module modules/mod_deflate.so
//下面写
<IfModule mod_deflate.c> 
DeflateCompressionLevel 6             //代表压缩级别,范围为1~9
SetOutputFilter DEFLATE             //代表启用deflate 模块对本站点的输出进行gzip压缩
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/csstext/javascript application/x-javascript application/javascript application/json 
SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary        //设置不对后缀 gif,jpg,jpeg,png 的图片文件进行压缩
SetEnvIfNoCase Request_URI .(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip  dont-vary     //设置不对 exe,tgz,gz 等文件进行压缩
SetEnvIfNoCase Request_URI .(?:pdf|mov|avi|mp3|mp4|rm)$ no-gzip  dont-vary 
AddOutputFilterByType DEFLATE text/*             //设置对文件是文本的内容进行压缩,例如 text/html text/css text/plain 等
AddOutputFilterByType     DEFLATE     application/ms*     application/vnd* 
application/postscript application/javascript application/x-javascript         //设置对 iavascript 文件进行压缩
AddOutputFilterByType DEFLATE application/x-httpd-php application/x-httpd-fastphp         //设置 apache 对 php 类型的文件进行压缩
</IfModule>

备注:可简化为如下代码
LoadFile /usr/lib64/libz.so
LoadModule deflate_module     modules/mod_deflate.so
//下面写
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/css text/xml text/javascript text/jpg text/png
DeflateCompressionLevel 9
SetOutputFilter DEFLATE
</IfModule>

(5)检查mod_deflate 模块

[root@apache~]# httpd -t
Syntax OK
[root@apache~]# apachectl restart   或   systemctl restart httpd
[root@apache ~]# apachectl -t -D DUMP MODULES | grep "deflate"
  deflate module (shared)

网页缓存

//配置 mod_expires 模块启用
[root@apache~]# vim /usr/local/httpd/conf/httpd.conf

LoadModule expires_module modules/mod_expires.so        ##去掉前面的注释

<IfModule mod_expires.c>
ExpiresActive On                 //打开网页缓存功能
ExpiresDefault "access plus 60 seconds"        //设置缓存60秒
</IfModule>
[root@apache~]# httpd -t            //检查语法
Syntax OK

[root@apache~]# apachectl restart        或   systemctl restart httpd

隐藏版本信息

        一般情况下,软件的漏洞信息和特定版本是相关的。因此,软件的版本号对攻击者来说是很有价值的,在浏览器中选择“査看元素"可以看到 Apache 的版本,实际生产环境中要隐藏 Apache 的版本号,减少受攻击的风险,保护服务器安全运行,修改 htpd.conf 配置文件,使 httpd-default.conf文件生效,它里面包含了是否返回版本信息的内容

[root@www ~]# vim /usr/local/httpd/conf/httpd.conf
Include conf/extra/httpd-default.conf        //去掉前面的注释符
[root@www ~]# vim /usr/local/httpd/conf/extra/httpd-default.conf
ServerTokens Prod                //将原本的Full改为Prod
//重启服务

Prod

Server:Apache

Major

Server:Apache/2

Minor

Server:Apache/2.4

OS

Server:Apache/2.4.25(Unix)

Full

Server:Apache/2.4.25(Unix) PHP/4.2.2 MyMod/1.2

Apache防盗链

        Apache 的默认配置除了性能可以优化外,还需要对安全性进行相应的配置。默认配置能保证服务器正常提供服务,但 Apache 作为一个软件,必然也会存在一些漏洞,尽可能的降低潜在的风险,是管理员必须掌握的内容,一般来说,用户浏览一个完整的页面并不是一次性全部传送到客户端的。如果所请求的页面带有图片或其他信息,那么第一个 HTTP 请求传送的是这个页面的文本,然后通过客户端的浏览器对这段文本进行解释执行,如果发现其中还有图片,那么客户端的浏览器会再次发送一条 HTTP 请求,当这个请求被处理后这个图片文件才会被传送到客户端,最后浏览器会将图片安放到页面的正确位置,就这样一个完整的页面要经过多次发送 HTTP 请求才能够被完整的显示

        配置实验

主机

域名

IP地址

操作系统

主要软件及版本

apache1

www.benet.com

192.168.10.101

CentOS7.9

httpd-2.4.25.tar.gz

apache2

www.accp.com

192.168.10.102

CentOS7.9

httpd-2.4.25.tar.gz

客户端

client

Windows 10

浏览器

(1)准备两个服务器及修改hosts文件

//服务器1
[root@www ~]# hostnamectl set-hostname apache1
[root@www ~]# bash
//服务器2
[root@www ~]# hostnamectl set-hostname apache2
[root@www ~]# bash

//修改每个主机的hosts文件
192.168.10.101 www.benet.com
192.168.10.102 www.accp.com
//并且关闭防火墙和selinux
[root@apache1 ~]# systemctl stop firewalld
[root@apache1 ~]# seteforce 0

(2)编写带有图片的网页(原图网站)

//准备图片,把图片复制到主服务器(www.benet.com)的 Apache 工作目录/usr/local/httpd/htdocs
[root@apache1 ~]# vim /usr/local/httpd/htdocs/index.html
<html>
<body>
<h1>It work! </h1>
<img src="logo.jpg"/>
</body>
</html>

(3)用另一台apache服务器盗链(盗图网站)

//在 www.accp.com 服务器,修改 index.html 文件,加入盗取图片链接
//使用yum在accp服务器安装httpd服务
[root@apache2 ~]# vim /var/www/html/index.html        //这是yum安装httpd的存放网页路径
<html>
<body>
<h1>dao lian </h1>
<img src="http://www.benet.com/logo.jpg" />
</body>
</html>

Apache1防盗链设置

[root@apache1 ~]# vim /usr/local/httpd/conf/httpd.conf

#去掉前面的注释
LoadModule rewrite_module modules/mod_rewrite.so        

#修改此网站访问参数
<Directory "/usr/local/httpd/htdocs">

AllowOverride None

RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://benet.com/.*$ [NC] 
RewriteCond %{HTTP_REFERER} !^http://benet.com$ [NC] 
RewriteCond %{HTTP_REFERER} !^http://www.benet.com/.*$ [NC] 
RewriteCond %{HTTP_REFERER} !^http://www.benet.com/$ [NC]
“%{HTTP REFERER}”:存放一个链接的URL,表示从哪个链接访问所需的网页。
“!^”: 表示不以后面的字符串开头。
“ http://www.benet.com” : 是本网站的路径,按整个字符串匹配。
“.*$” : 表示以任意字符结尾。
“[NC]”: 表示不区分大小写字母。

ewriteRule .*\.(gif|jpg|swf)$ http://www.benet.com/error.png        //RewriteRule中不要添加png的格式,否则客户端看不到error图片
“.”: 表示匹配一个字符。
“*”:表示匹配0 到多个字符,与“.”合起来的意思是匹配0到多次前面的任意字符,如果是1到多次匹配可以用“+”表示。
“\.”: 在这里的“\“是转义符,”." 就代表符号“.”的意思。因为“. ”在指令中是属于规则字符,有相应的含义,如果需要匹配,需要在前而加个转义符"\”,其它规则字符如果需要匹配,也做同样处理
“(gif|jpg|swf)”: 表示匹配“gif”、“jpg”、“swf"任意一个, “$”表示结束。最后的规则是以“.gif”、 “.jpg”、 ".swf”结尾

Require all granted
</Directory>

//备注:
AllowOverride ALL
通常利用Apache的rewrite模块对 URL 进行重写的时候, rewrite规则会写在 .htaccess 文件里,这时就需要将AllowOverride 的参数设置为ALL
但要使 apache 能够正常的读取.htaccess 文件的内容,就必须对.htaccess 所在目录进行配置
从安全性考虑,根目录的AllowOverride属性一般都配置成不允许任何Override
如果AllowOverride 的参数设置为None,需要将rewrite规则直接写在httpd的主配置文件中

[root@apache1 ~]# httpd -t
复制 error.png 这个图片到benet站点的工作目录 /usr/local/httpd/htdocs,再次访问网站
[root@apache1 ~]# systemctl restart httpd

  • 12
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值