Apache的网页与安全优化

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_42298432/article/details/100540056

Apaceh网页优化

网站的访问速度是由多个因素共同决定的,这些因素包括应用程序的响应速度,网络带宽,服务器性能,与客户端之前的网络传输速度,其中最重要的一个因素是Apache本身的响应速度,只有对Apache服务器进行适当的优化配置,才能让Apache发挥出更好的性能。因此,针对我们的应用需求对Apache服务器的配置进行一定的优化是不可少的。
 
技能目标:
1.掌握Apache网页压缩
2.掌握Apache的网页缓存
3.掌握Apache网页防盗链
4.掌握Apache隐藏版本信息
5.Apache自带rotarelogs分割工具

1.Apache网页压缩

注意:gzip可以极大的加速网站,有时压缩比率高到80%,最少都有40%以上,还是相当不错的。   在Apache2之后的版本,模块名不叫gzip,而叫mod_deflate.  

 
1.gzip介绍
 
gzip是一种流行的文件压缩算法,尤其在Linux平台,当应用gzip压缩到一个纯文本文件是,效果是非常明显的,大约可以减少70%以上的文件大小,利用Apache中的gzip模块,我么可以使用gzip压缩算法来对Apache服务器发布的网页内容进行压缩后在传输到客户端浏览器,这样经过压缩实际上降低了网络传输的字节数,最明显的好处就是可以加快网页加载的速度。只不过会让服务器CPU占用率稍微提升一两个百分点或者更少。

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

 
 
3.Apache的压缩模块
 
Apache 1.x系列没有内建网页压缩技术,使用的时额外的第三方mod_gzip模块来执行压缩,在Apache2.x的时候,把网页压缩加入进去,内建了mod_deflate这个模块。mod_deflate压缩速度快,而mod_gzip的压缩比略高。如果你的网站访问量较小,想要加快网页的加载速度,就使用mod_gzip.如果网站的访问量大,并且使用的时共享的虚拟主机,使用mod_defalut将会是更好的选择。

 
 

1.检查是否安装了mod_defllate模块

httpd -t -D DUMP_MODULES | grep deflate
httpd -M | grep deflate
yum安装httpd的话默认就开启了,模块位置在(/etc/httpd/conf.modules.d/00-base.conf)  

 

2.安装mod_deflate模块(编译安装的情况下没有deflate模块)

         如果没有安装mod_deflate模块,需要停止Apache服务,重新编译安装Apache,在参数中加入mod_deflate模块内容;

./configure  --prefix=/usr/local/httpd --enable-deflate --enable-so --enable-rewrite --enable-charset-list --enable-cgi
make && make install 
  另一种添加方法:DSO方式安装
 cd /root/httpd-2.4.25/modules/filters  切到apache源码包mod_deflate所在的目录下
 /usr/local/httpd/bin/apxs -c -i -a mod_deflate.c 以dso的方式编译安装到apache中
 /usr/local/httpd/bin/apxs -c -i -a /root/httpd-2.2.17/modules/metadata/mod_headers.c 以dso的方式编译安装到apache中 
 httpd -M | grep deflate 查看模块是否安装成功

apxs命令参数说明:

-i :此选项表示需要执行安装操作,以安装一个或多个动态共享对象到服务器的modules目录中。

-a:此选项自动增加一个LoadModule行到httpd.conf文件中,以启用此模块,或者,如果此行已经存在,则启用之。

-c:此选项表示需要执行编译操作
 
 
注意:
如果重启的时候出现错误:
引用:

Cannot load /usr/local/apache/modules/mod_deflate.so into server: /usr/local/apache/modules/mod_deflate.so: undefined symbol: inflateEnd

需要在LoadModuledeflate_module modules/mod_deflate.so 的前面加载zlib.so
这里需要注意的是:LoadModuledeflate_module需要放在LoadModulephp5_module之后
引用:
LoadFile/usr/lib/libz.so(x64系统中该库文件位于/usr/lib64目录下,可以软链接到/usr/lib下
LoadModule deflate_module modules/mod_deflate.so)

 
 

3.配置mod_deflate模块启用

修改Apache主配置httpd.conf文件,增加配置参数: LoadModule deflate_module modules/mod_deflate.so   LoadModule headers_module modules/mod_headers.so

打开httpd.conf后,先将上面两行配置前面的#号去掉,这样Apache就会启用这个两个模块,其中mod_deflate是压缩模块,就是对要传输到客户端的代码进行gzip压缩;mod_headers那么浏览器就会对gzip压缩过的页面进行下载,而无法正常显示。
在httpd.conf中加入以下代码,可以加到任何空白地方,不了解Apache的话,如果担心加错地方,就放到http.conf文件的最后一行
注意:在添加代码前最好先查一查要添加的代码是否存在

<IfModule mod_deflate.c>
        DeflateCompressionLevel 9
        SetOutputFilter DEFLATE
        #AddOutputFilterByType DEFLATE text/html text/plain text/xml application/x-javascript application/x-httpd-php
        #AddOutputFilterByType DEFLATE image/*
        AddOutputFilterByType DEFLATE text/*
        AddOutputFilterByType DEFLATE application/ms* application/vnd* application/postscript application/javascript application/x-javascript
        AddOutputFilterByType DEFLATE application/x-httpd-php application/x-httpd-fastphp
        SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary
        SetEnvIfNoCase Request_URI .(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary
        SetEnvIfNoCase Request_URI .(?:pdf|mov|avi|mp3|mp4|rm)$ no-gzip dont-vary
</IfModule>

1(压缩速度最快,压缩质量最低) 9(压缩速度最慢,压缩质量最高) 默认值 :6 (压缩速度和压缩质量较为平衡)
DeflateCompressionLevel 9 #压缩程度的等级,预设可以采用6这个数值,以维持耗用处理器效能与网页压缩质量的平衡。
 
SetOutputFilterDEFLATE#设置输出过滤器,对输出启用压缩,必须的,就像一个开关一样,告诉Apache对传输到浏览器的内容进行压缩

 

 AddOutputFilterByType DEFLATE text/html text/plain text/xml application/x-javascript application/x-httpd-php
 AddOutputFilterByType DEFLATE image/* 注意:图片不需要进行压缩,否则越压缩越大
 
 以上设置对文件的内容进行压缩,例如text/html  text/css text/plain等  
AddOutputFilterByType DEFLATE application/ms* application/vnd* application/postscript application/javascript application/x-javascript

以上对JavaScript文件进行压缩 
AddOutputFilterByType DEFLATE application/x-httpd-php application/x-httpd-fastphp

以上对PHP类型的文件进行压缩
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

同上就是设置不对pdf,avi,mp3等的文件进行压缩

4.设置日志输出

DeflateFilterNote Input input_info		声明输入流的byte数量
DeflateFilterNote Output output_info		声明输出流的byte数量
DeflateFilterNote Ratio ratio_info		声明压缩的百分比
LogFormat '"%r" %{output_info}n/%{input_info}n (%{ratio_info}n%%)' 		deflate声明日志格式
CustomLog logs/deflate_log.log deflate

重启服务

systemctl restart httpd

注意:
 
图片是不需要启用Gzip压缩的.

2.网页缓存

    网页缓存是一部分经常不会改变或变动很少的页面缓存,下次浏览器再次访问这些页面时,不需要再次去下载这些页面,从而提升了用户的访问速度。
    Apache的mod_expires模块会自动生成页面头部信息中的Express标签和Cache-Control标签,客户端浏览器根据标签决定下次访问实在本地机器的缓存中获取页面,不需要再次向服务器发出请求,从而降低客户端的访问频率和次数,达到减少不必要的流量和增加访问速度的目的。

1.检查mod_expires模块是否安装

httpd -M | grep expires (安装步骤参考第一个内容)

2.未启用expires的效果

[root@localhost /]# curl -I www.ityunn.com

HTTP/1.1 200 OK
Date: Wed, 04 Sep 2019 21:43:16 GMT
Server: Apache/2.4.6 (CentOS)
Last-Modified: Tue, 03 Sep 2019 10:58:26 GMT
ETag: "15-591a3f7c53031"
Accept-Ranges: bytes
Content-Length: 21
Content-Type: text/html; charset=UTF-8

3.配置mod_expires模块

<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType text/css "now plus 1 month"
ExpiresByType application/x-javascript "now plus 5 day"
ExpiresByType image/jpeg "access plus 1 month"
ExpiresByType image/gif "access plus 1 month"
ExpiresByType image/bmp "access plus 1 month"
ExpiresByType image/x-icon "access plus 1 month"
ExpiresByType image/png "access plus 1 minutes"
ExpiresByType application/x-shockwave-flash "access plus 1 month"
ExpiresDefault "now plus 0 minutes"
</IfModule> 

4.启用mod_expires的效果

[root@localhost conf]# curl -I www.ityunn.com
HTTP/1.1 200 OK
Date: Wed, 04 Sep 2019 21:46:26 GMT
Server: Apache/2.4.6 (CentOS)
Last-Modified: Tue, 03 Sep 2019 10:58:26 GMT
ETag: "15-591a3f7c53031"
Accept-Ranges: bytes
Content-Length: 21
==Cache-Control: max-age=0
==Expires: Wed, 04 Sep 2019 21:46:26 GMT
Content-Type: text/html; charset=UTF-8

ExpiresDefault 和ExpiresByType指令同样能够用易懂的语法格式进行定义:

ExpiresDefault "<base> [plus] {<num><type>}"
ExpiresByType type/encoding "<base> [plus] {<num><type>}"

其中是下列之一:
• access
• now(等价于’access ')
• modification
plus关键字是可选的。必须是整数,是下列之一:
 
• years //年
• months//月
• weeks//星期
• days/日
• hours/时
• minutes/分
• seconds/秒

例如,下列3个指令都表示文档默认的有效期是一个月:

ExpiresDefault "access plus 1 month"
ExpiresDefault "access plus 4 weeks"
ExpiresDefault "access plus 30 days"

有效期可以通过增加""子句进一步调整:

ExpiresByType text/html "access plus 1 month 15 days 2 hours"
ExpiresByType image/gif "modification plus 5 hours 3 minutes"

注意,如果你使用基于最后修改日期的设置,"Expires:"头将不会 被添加到那些并非来自于磁盘文件的内容。这是因为这些内容并不存在"最后修改时间"的属性。
 
#GIF有效期为1个月(秒数)

ExpiresByType image/gif A2592000 
ExpiresByType image/jpeg A2592000 
ExpiresByType image/png A2592000 
ExpiresByType image/x-icon A2592000 
ExpiresByType application/x-javascript A604800 
ExpiresByType text/plain A604800 

#HTML文档的有效期是最后修改时刻后的一星期

ExpiresByType text/ht
ml M604800 

注意:以上"M"表示源文件的最后修改时刻,"A"表示客户端对源文件的访问时刻。后面的时间则以秒计算。
 

3.隐藏版本信息

1.测试Apache的默认状态

[root@localhost conf]# curl -I www.ityunn.com
HTTP/1.1 200 OK
Date: Wed, 04 Sep 2019 21:58:00 GMT
Server: Apache/2.4.6 (CentOS)
Last-Modified: Tue, 03 Sep 2019 10:58:26 GMT
ETag: "15-591a3f7c53031"
Accept-Ranges: bytes
Content-Length: 21
Cache-Control: max-age=0
Expires: Wed, 04 Sep 2019 21:58:00 GMT
Content-Type: text/html; charset=UTF-8

2.在Apache主配置中启用如下参数:

Include  /usr/share/doc/httpd-2.4.6/httpd-default.conf

3.修改如下配置文件:

vim /usr/share/doc/httpd-2.4.6/httpd-default.conf
找到:
ServerTokens Full
ServerSignature On
改成:
ServerTokens Prod
ServerSignature off

重启Apache服务并测试。

[root@localhost conf]# curl -I www.ityunn.com
HTTP/1.1 200 OK
Date: Wed, 04 Sep 2019 22:09:17 GMT
Server: Apache
Last-Modified: Tue, 03 Sep 2019 10:58:26 GMT
ETag: "15-591a3f7c53031"
Accept-Ranges: bytes
Content-Length: 21
Cache-Control: max-age=0
Expires: Wed, 04 Sep 2019 22:09:17 GMT
Content-Type: text/html; charset=UTF-8

注意:如果你需要彻底将版本之类的信息进行改头换面,你就需要在编译之前做准备或者进行从新编译了。在重新编译时,修改源码包下include目录下的ap_release.h文件

define AP_SERVER_BASEVENDOR "Apache Software Foundation" 服务的供应商名称
define AP_SERVER_BASEPROJECT "Apache HTTP Server"  服务的项目名称
define AP_SERVER_BASEPRODUCT "Apache"        服务的产品名
define AP_SERVER_MAJORVERSION_NUMBER 2  主要版本号
define AP_SERVER_MINORVERSION_NUMBER 4  小版本号
define AP_SERVER_PATCHLEVEL_NUMBER 23  补丁级别
define AP_SERVER_DEVBUILD_BOOLEAN  0  

上述列出的行,已经给出了注释,大家可以修改成自己想要的,然后编译安装之后,对方就彻底不知道你的版本号了。
 
 

4.Apache日志分割

简介:
为什么要日志分割?

随着网站的访问越来越大,WebServer产生的日志文件也会越来越大,如果不对日志进行分割,那么只能一次将大的日志(如Apache的日志)整个删除,

这样也丢失了很多对网站比较宝贵的信息,因为这些日志可以用来进行访问分析、网络安全监察、网络运行状况监控等,

因此管理好这些海量的日志对网站的意义是很大的。

方法1:使用rotatelogs(apache自带的工具)每隔一天记录一个日志
 
(1.)编辑Apache的主配置文件,更改内容如下:

注释掉如下两行

ErrorLog logs/error_log
CustomLog logs/access_log common

然后添加如下两行:

ErrorLog "|/usr/sbin/rotatelogs -l logs/error_%Y%m%d.log 86400"
CustomLog "|/usr/sbin/rotatelog -l logs/access_%Y%m%d.log 86400" combined

-l 使用本地时间代替GMT时间作为时间基准。CustomLog行时定义访问日志格式,86400表示一天。即每天生成一个新的日志文件。重启Apache服务查看。
 
 
最后说明一下,查看Apache写日志时根据文件的i节点,而不是文件名,所以有时候我们将Apache日志文件重命名了,如果不重启Apache他还是会往重命名后的文件里面写入。

方法2:使用 cronolog 为每一天建立一个新的日志
(1.)下载安装cronolog程序

官网下载地址:https://centos.pkgs.org/7/epel-x86_64/cronolog-1.6.2-14.el7.x86_64.rpm.html

 tar zxf cronolog-1.6.2.tar.gz 
 cd cronolog-1.6.2/
 ./configure && make && make install 
 或者
 yum -y install cronolog-1.6.2-14.el7.x86_64.rpm yum会自动去yum仓库里面调用软件是需要的依赖包

(2.)安装完成后,进到Apache主配置文件添加如下两行:

ErrorLog "|/usr/local/sbin/cronolog logs/error-%Y%m%d.log"
CustomLog "|/usr/local/sbin/cronolog logs/access-%Y%m%d.log" combined

如果Apache中有多个虚拟主机,最好每个虚拟主机中放置一个这样的代码,并将日志文件名改成不同的名字。

(3.)重启Apache验证,查看logs目录下的日志文件

注意:这两个管道日志文件程序还有一点不同之处是,使用cronolog 时如果日志是放在某个不存在的路径则会自动创建目录,而使用 rotatelogs 时不能自动创建,这一点要特别注意。

扩展:

这个保证了每天一个文件夹文,件夹下每个小时产生一个log

CustomLog "|/usr/local/sbin/cronolog logs /%Y%m%d/access_log.%H" combined  

按天轮询(生产环境常见用法,推荐使用):

CustomLog "|/usr/local/sbin/cronolog logs/access_www_%Y%m%d.log" combined

按小时轮询(生产环境较常见用法):

CustomLog "|/usr/local/sbin/cronolog logs /access_www_ %Y%m%d%H.log" combined

5.防盗链

       一般来说,我们浏览一个完整的页面并不是一次性全部传送到客户端的,如果所请求的的页面带有图片或其他信息,那么第一个HTTP请求传送的是这个页面的文本,然后通过客户端的浏览器对这段文本进行解释执行,如果发现其中还有图片,那么客户端的浏览器会再次发送一条httpd请求,当这个请求被处理后这个图片文件才会被传送到客户端,最后浏览器会将图片安放到页面的正确位置,这个一个完整的页面要经过多次发送httpd请求才能够被完整的显示。
 
HTTP标准协议中有专门的Referer字段记录,它的作用如下:
(1) 可以追溯上一个入站地址时什么
(2)对于资源文件,可以跟踪到包含显示他的网页地址是什么,因此所有防盗链反法都是基于这个Referer字段。

 
使用环境:首先准备测试环境搭建两台Apache网站服务,来模拟盗链的主机与被盗链的主机。

IP地址 域名 用途
192.168.10.104 www.ityunn.com Centos源主机
192.168.10.105 www.ityun.com Centos盗链主机

如果想看Apache详细的安装过程请点击下面这条链接地址即可:
Apache的安装链接

1.准备图片(Centos源主机上面的配置)

mkdir /var/www/html/images
find / -iname '*.jpg' -exec cp {} /var/www/html/images/ \;
find / -iname '*.png' -exec cp {} /var/www/html/images/ \;

修改index.html网页文件,加入图片显示代码

vim /var/www/html/index.html
<html>
<body>
<h1>woshinibaba</h1>
<img src="yellow-rose.jpg"/>
<body>
</html>          

盗链主机

vim /var/www/html/index.html
<html>
<body>
<h1>woshinimama</h1>
<img src="http://www.ityunn.com/yellow-rose.jpg"/>
<body>
</html>

在这里插入图片描述
通过上面这幅图说明,第二台Apache成功盗链了第一台Apache网站上的图片。

那么为了防止别人恶意地占用自己的资源以及黑客的乘虚而入我们在第一台Apache服务上配置防盗链!!!!!
 

一:配置Apache防盗链

方法一:Apache防盗链的第一种方法,可以用rewrite方法实现

1.首先确保Apache有rewrite模块

httpd -M | grep rewrite

2.修改配置文件
注意:把规则配置在<Directory>里面,网页路径

vim /etc/httpd/conf/httpd.conf 
防盗链配置
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !ityunn\.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !ityunn\.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !www\.ityunn\.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !www\.ityunn\.com/.*$ [NC]
RewriteRule .*\.(gif|jpg|swf)$ http://www.ityunn.com/images/document-new.png [R,NC,L]

1.RewriteEngine On#启用rewrite,要想rewrite起作用,必须要写上
 
 
2.RewriteCond test-string condPattern #写在RewriteRule之前,可以有一或N条,用于测试rewrite的匹配条件,具体怎么写,后面会详细说到。
 
3.RewriteRule Pattern Substitution#规则
 
4. %{HTTP_REFERER}:服务器变量,HTTPReferer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器藉此可以获得一些信息用于处理。比如从我主页上链接到一个朋友那里,他的服务器就能够从HTTP Referer中统计出每天有多少用户点击我主页上的链接访问他的网站。
 
5.[ NC]指的是不区分大小写,[R]强制重定向redirect
 
6.字母L表示如果能匹配本条规则,那么本条规则是最后一条(Last),忽略之后的规则
 
防盗链配置的说明:
 

  1. **:表示自己的信任站点。对我的站点来说,设置为 http://www.ityunn.com和 http://ityunn.com

  2. :要保护文件的扩展名(以|分开)。以这些为扩展名的文件,必须通过红色标注的网址引用,才可以访问。

  3. :定义被盗链时替代的图片,让所有盗链 jpg、gif、swf 等文件的网页,显示网页文档根目录下的文件images/document-new.png 。注意:替换显示的图片不要放在设置防盗链的目录中,并且该图片文件体积越小越好。

当然你也可以不设置替换图片,而是使用下面的语句即可:RewriteRule .*.(gif|jpg|png)$ - [F]

注:[F] (强制URL为被禁止的forbidden),强制当前URL为被禁止的,即,立即反馈一个HTTP响应代码403(被禁止的)。

注意:
RewriteCond%{HTTP_REFERER}!^$

上面这一行意思是在允许空“HTTP_REFERER”的访问,即允许用户在浏览器地址栏中直接输入图片地址时图片文件的显示。

RewriteCond %{HTTP_REFERER} !ityunn.com/.*$[NC]

RewriteCond %{HTTP_REFERER} !www.ityunn.com/.*$[NC]

设置允许访问的HTTP来源,包括网站自身。

RewriteRule .*.(gif|jpg|swf)$ http://www.ityunn.com/images/document-new.png [R,NC,L]

将不满足referer条件的访问重定向至document-new.png。document-new.png位于允许“盗链”的目录images中,要相当注意,不然,警告信息和图片将无法在对方网站上显示**
 

3.移动图片到images/目录下面

mv /usr/share/icons/gnome/256x256/actions/document-new.png /var/www/html/images

4.盗链主机访问进行测试
在这里插入图片描述
注意:如果看不到效果,记得多清除缓存哦!!!

通过上图可以看出第二台Apache访问的是已经配置过防盗链的第一台Apache服务,所以他只能看到我们随意上传的图片。
&nsbp;

方法2:通过判断浏览器头信息来阻止某些请求,即利用SetEnvIfNoCase和access。这个方法可以通过阻止某些机器人或蜘蛛爬虫抓取你的网站来节省你的带宽流量。

语法: SetEnvIfNoCase attribute regex [!]env-variable[=value] [[!]env-variable[=value]] ...

SetEnvIfNoCase 当满足某个条件时,为变量赋值,即根据客户端请求属性设置环境变量。

注:Referer :指明了请求当前资源原始资源的URL,使用referer是可以防盗链

(1.)在Apache主配置文件中找到对应的位置(或虚拟主机中),加入下列代码:

示例:

SetEnvIfNoCase Referer "^$" local_ref
SetEnvIfNoCase Referer "www.ityunn.com/.*$" local_ref
SetEnvIfNoCase Referer "ityunn.com/.*$" local_ref
<filesmatch "\.(mp3|mp4|zip|rar|jpg|gif|png)">
 Require all denied
 Require env local_ref
</filesmatch
2.4版本以上,方法如下:
<filesmatch "\.(mp3|mp4|zip|rar|jpg|gif|png)">
    Require all denied
    Require env local_ref
</filesmatch>
 2.4版本以下的
方法一:
    Order Deny,Allow
    Allow from env=local_ref 
    Deny from all
方法二:
    Order Allow,Deny
    Allow from env=local_ref

注意:图片格式要明确

(2.)重启Apache服务,并在客户端上进行访问验证:
在这里插入图片描述
通过上图说明第一台Apache利用SetEnvIfNoCase和access方法成功地阻止了第二台Apache服务的盗链!!!

到这里两种方式的防盗链已演示完毕.

总结:
(1.)Apache开启Gzip压缩功能的调优(调优)
(2.)Apache开启Expires缓存功能的调优(调优)
(3.)实现Apache隐藏版本号的功能(安全)
(4.)实现Apache日志切割的功能(安全)
(5.)实现Apache防盗链(安全)

猜你喜欢

转载自blog.csdn.net/qq_42298432/article/details/100540056