配置防盗链
为了防止别人盗用你网站上的图片,视频,歌曲,文档等资源,我们需要给网站配置防盗链。
通过限制referer来实现防盗链的功能
配置指定目录的防盗规则:
[root@aliyun ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
虚拟主机1增加防盗规则:
<VirtualHost *:
80
>
80是http的服务端口,不用改
ServerAdmin
webmaster
@
test.com
网站管理员邮箱,设置成自己的网站
DocumentRoot "
/data/wwwroot/www.test.com
"
虚拟主机根目录放网站程序
ServerName
test.com
网站名,域名
ServerAlias
www
.test.com
网站别名,域名别名,可写多个要用空格隔开
(配置跳转跟这里的别名无关,有无别名这一项都会跳转成功,由rewrite跳转会有301状态码和说明)
<Directory /data/wwwroot/www.test.com> 需配置防盗的目录
SetEnvIfNoCase Referer "http://www.test.com" local_ref referer规则,变量local_ref
SetEnvIfNoCase Referer "http://test.com" local_ref referer规则,变量local_ref
SetEnvIfNoCase Referer "^$" local_ref referer规则,变量local_ref
<filesmatch "\.(txt|doc|mp3|zip|rar|jpg|gif)"> 匹配referer的文件类型
Order Allow,Deny 命令,先允许后拒绝
Allow from env=local_ref 允许来自local_ref的变量
</filesmatch>
</Directory>
<IfModule mod_rewrite.c>
需要mod_rewrite模块支持
RewriteEngine on
打开rewrite功能
RewriteCond %{HTTP_HOST} !^
www.test.com
$
将
非
www.test.com的域名请求跳转至此
RewriteRule ^/(.*)$ http://
www.test.com
/$1 [R=
301,L
]
状态码301永久跳转,L=last,跳一次
定义跳转规则,将以^/(.*)$开头结尾的域名请求跳转,
$1代表^/(.*)$
</IfModule>
ErrorLog "logs/
test.com
-error_log"
错误日志保存路径
SetEnvIf Request_URI ".*\.gif$" img 日志记录规则,变量表示.gif文件
SetEnvIf Request_URI ".*\.jpg$" img 日志记录规则,变量表示.jpg文件
SetEnvIf Request_URI ".*\.png$" img 日志记录规则,变量表示.png文件
SetEnvIf Request_URI ".*\.bmp$" img 日志记录规则,变量表示.bmp文件
SetEnvIf Request_URI ".*\.swf$" img 日志记录规则,变量表示.swf文件
SetEnvIf Request_URI ".*\.js$" img 日志记录规则,变量表示.js文件
SetEnvIf Request_URI ".*\.css$" img 日志记录规则,变量表示.cs文件
CustomLog "logs/test.com-access_log" combined
env=
!
img
</VirtualHost>
!
取反,不记录变量所表示的文件访问记录,访问日志保存路径
保存退出
测试语法并重新加载配置
[root@aliyun ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@aliyun ~]# /usr/local/apache2.4/bin/apachectl graceful
[root@aliyun ~]#
测试:用指定允许的referer和非允许的referer分别测试
[root@aliyun ~]# curl -x127.0.0.1:80 -I -e "http://www.test.com“ http://www.test.com/test.txt
HTTP/1.1
200 OK
Date: Fri, 01 Jun 2018 02:57:37 GMT
Server: Apache/2.4.33 (Unix) PHP/7.2.5
Last-Modified: Fri, 01 Jun 2018 02:51:28 GMT
ETag: "0-56d8ba91ef9ce"
Accept-Ranges: bytes
Cache-Control: max-age=0
Expires: Fri, 01 Jun 2018 02:57:37 GMT
Content-Type: text/plain
[root@aliyun ~]# curl -x127.0.0.1:80 -I -e "http://www.test.com“ http://www.test.com /images/test.jpg
HTTP/1.1
200 OK
Date: Fri, 01 Jun 2018 02:57:49 GMT
Server: Apache/2.4.33 (Unix) PHP/7.2.5
Last-Modified: Thu, 31 May 2018 02:41:59 GMT
ETag: "0-56d77695b2edb"
Accept-Ranges: bytes
Cache-Control: max-age=86400
Expires: Sat, 02 Jun 2018 02:57:49 GMT
Content-Type: image/jpeg
[root@aliyun ~]# curl -x127.0.0.1:80 -I -e "
http://www.123.com"
http://www.test.com/images/test.jpg
HTTP/1.1
403 Forbidden
Date: Fri, 01 Jun 2018 02:58:06 GMT
Server: Apache/2.4.33 (Unix) PHP/7.2.5
Content-Type: text/html; charset=iso-8859-1
[root@aliyun ~]# curl -x127.0.0.1:80 -I -e
"http://www.123.com"
http://www.test.com/test.txt
HTTP/1.1
403 Forbidden
Date: Fri, 01 Jun 2018 02:58:23 GMT
Server: Apache/2.4.33 (Unix) PHP/7.2.5
Content-Type: text/html; charset=iso-8859-1
[root@aliyun ~]#
访问控制Directory
配置指定定目录的控制规则:
[root@aliyun ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
虚拟主机1增加控制规则:
<VirtualHost *:
80
>
80是http的服务端口,不用改
ServerAdmin
webmaster
@
test.com
网站管理员邮箱,设置成自己的网站
DocumentRoot "
/data/wwwroot/www.test.com
"
虚拟主机根目录放网站程序
ServerName
test.com
网站名,域名
ServerAlias
www
.test.com
网站别名,域名别名,可写多个要用空格隔开
(配置跳转跟这里的别名无关,有无别名这一项都会跳转成功,由rewrite跳转会有301状态码和说明)
<Directory /data/wwwroot/www.test.com> 需配置防盗的目录
SetEnvIfNoCase Referer "http://www.test.com" local_ref referer规则,变量local_ref
SetEnvIfNoCase Referer "http://test.com" local_ref referer规则,变量local_ref
SetEnvIfNoCase Referer "^$" local_ref referer规则,变量local_ref
<filesmatch "\.(txt|doc|mp3|zip|rar|jpg|gif)"> 匹配referer的文件类型
Order Allow,Deny 命令,先允许后拒绝
Allow from env=local_ref 允许来自local_ref的变量
</filesmatch>
</Directory>
<Directory /data/wwwroot/www.test.com/admin/> 控制admin目录
Order deny,allow 命令,先拒绝后允许
Deny from all 限制所有
Allow from 127.0.0.1 允许来自127.0.0.1的访问
</Directory>
<IfModule mod_rewrite.c>
需要mod_rewrite模块支持
RewriteEngine on
打开rewrite功能
RewriteCond %{HTTP_HOST} !^
www.test.com
$
将
非
www.test.com的域名请求跳转至此
RewriteRule ^/(.*)$ http://
www.test.com
/$1 [R=
301,L
]
状态码301永久跳转,L=last,跳一次
定义跳转规则,将以^/(.*)$开头结尾的域名请求跳转,
$1代表^/(.*)$
</IfModule>
ErrorLog "logs/
test.com
-error_log"
错误日志保存路径
SetEnvIf Request_URI ".*\.gif$" img 日志记录规则,变量表示.gif文件
SetEnvIf Request_URI ".*\.jpg$" img 日志记录规则,变量表示.jpg文件
SetEnvIf Request_URI ".*\.png$" img 日志记录规则,变量表示.png文件
SetEnvIf Request_URI ".*\.bmp$" img 日志记录规则,变量表示.bmp文件
SetEnvIf Request_URI ".*\.swf$" img 日志记录规则,变量表示.swf文件
SetEnvIf Request_URI ".*\.js$" img 日志记录规则,变量表示.js文件
SetEnvIf Request_URI ".*\.css$" img 日志记录规则,变量表示.cs文件
CustomLog "logs/test.com-access_log" combined
env=
!
img
</VirtualHost>
!
取反,不记录变量所表示的文件访问记录,访问日志保存路径
保存退出
测试语法并重新加载配置:
[root@aliyun ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@aliyun ~]# /usr/local/apache2.4/bin/apachectl graceful
[root@aliyun ~]#
创建目录和文档,用环回地址和网卡ip来测试:
[root@aliyun ~]#
mkdir
/data/wwwroot/
www.test.com/admin
[root@aliyun ~]#
touch
/data/wwwroot/
www.test.com/
admin/test2.txt
[root@aliyun ~]#
curl -x
12.19.23.43:80
-I
www.test.com/
admin/test2.txt
HTTP/1.1
403 Forbidden
Date: Fri, 01 Jun 2018 04:50:26 GMT
Server: Apache/2.4.33 (Unix) PHP/7.2.5
Content-Type: text/html; charset=iso-8859-1
[root@aliyun ~]# curl -x
127.0.0.1:80
-I
www.test.com/
admin/test2.txt
HTTP/1.1
200 OK
Date: Fri, 01 Jun 2018 04:50:32 GMT
Server: Apache/2.4.33 (Unix) PHP/7.2.5
Last-Modified: Fri, 01 Jun 2018 04:24:16 GMT
ETag: "0-56d8cf4fc6626"
Accept-Ranges: bytes
Cache-Control: max-age=0
Expires: Fri, 01 Jun 2018 04:50:32 GMT
Content-Type: text/plain
[root@aliyun ~]#
tail -2
/usr/local/apache2.4/logs/elon.org.cn-access_20180601.log
12.19.23.43
- - [01/Jun/2018:12:50:26 +0800] 136 "HEAD HTTP://
www.test.com
/admin/test2.txt HTTP/1.1"
403
-
"-"
"curl/7.29.0"
127.0.0.1 - - [01/Jun/2018:12:50:32 +0800] 1043 "HEAD HTTP://
www.test.com
/admin/test2.txt HTTP/1.1"
200
- "
-
" "curl/7.29.0"
访问控制FilesMatch
配置指定定目录的控制规则:
[root@aliyun ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
虚拟主机1增加控制规则:
<VirtualHost *:
80
>
80是http的服务端口,不用改
ServerAdmin
webmaster
@
test.com
网站管理员邮箱,设置成自己的网站
DocumentRoot "
/data/wwwroot/www.test.com
"
虚拟主机根目录放网站程序
ServerName
test.com
网站名,域名
ServerAlias
www
.test.com
网站别名,域名别名,可写多个要用空格隔开
(配置跳转跟这里的别名无关,有无别名这一项都会跳转成功,由rewrite跳转会有301状态码和说明)
<Directory /data/wwwroot/www.test.com> 需配置防盗的目录
SetEnvIfNoCase Referer "http://www.test.com" local_ref referer规则,变量local_ref
SetEnvIfNoCase Referer "http://test.com" local_ref referer规则,变量local_ref
SetEnvIfNoCase Referer "^$" local_ref referer规则,变量local_ref
<filesmatch "\.(txt|doc|mp3|zip|rar|jpg|gif)"> 匹配referer的文件类型
Order Allow,Deny 命令,先允许后拒绝
Allow from env=local_ref 允许来自local_ref的变量
</filesmatch>
</Directory>
<Directory /data/wwwroot/www.test.com/admin> 控制admin目录
Order deny,allow 命令,先拒绝后允许
Deny from all 拒绝所有
Allow from 127.0.0.1 允许来自127.0.0.1的访问
</Directory>
<Directory /data/wwwroot/www.test.com/
test
> 要控制的文件所在目录
<FilesMatch "
test.php(.*)
"> 要控制的文件名
Order deny,allow 命令,先拒绝,后允许
Deny from all 拒绝所有访问
Allow from 127.0.0.1 允许来自127.0.0.1的访问
</FilesMatch>
</Directory>
<IfModule mod_rewrite.c>
需要mod_rewrite模块支持
RewriteEngine on
打开rewrite功能
RewriteCond %{HTTP_HOST} !^
www.test.com
$
将
非
www.test.com的域名请求跳转至此
RewriteRule ^/(.*)$ http://
www.test.com
/$1 [R=
301,L
]
状态码301永久跳转,L=last,跳一次
定义跳转规则,将以^/(.*)$开头结尾的域名请求跳转,
$1代表^/(.*)$
</IfModule>
ErrorLog "logs/
test.com
-error_log"
错误日志保存路径
SetEnvIf Request_URI ".*\.gif$" img 日志记录规则,变量表示.gif文件
SetEnvIf Request_URI ".*\.jpg$" img 日志记录规则,变量表示.jpg文件
SetEnvIf Request_URI ".*\.png$" img 日志记录规则,变量表示.png文件
SetEnvIf Request_URI ".*\.bmp$" img 日志记录规则,变量表示.bmp文件
SetEnvIf Request_URI ".*\.swf$" img 日志记录规则,变量表示.swf文件
SetEnvIf Request_URI ".*\.js$" img 日志记录规则,变量表示.js文件
SetEnvIf Request_URI ".*\.css$" img 日志记录规则,变量表示.cs文件
CustomLog "logs/test.com-access_log" combined
env=
!
img
</VirtualHost>
!
取反,不记录变量所表示的文件访问记录,访问日志保存路径
保存退出
测试语法并重新加载配置:
[root@aliyun ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@aliyun ~]# /usr/local/apache2.4/bin/apachectl graceful
[root@aliyun ~]#
创建目录和文档,用环回地址和网卡ip测试:
[root@aliyun ~]#
mkdir
/data/wwwroot/
www.test.com/
test
[root@aliyun ~]#
cp
/data/wwwroot/
www.test.com
/
test.php
/data/wwwroot/
www.test.com
/test/
test.php
[root@aliyun ~]#
curl -x
12.19.23.43:80
-I
www.test.com/
test/
test.php
HTTP/1.1
403 Forbidden
访问的test目录和上面例子的admin目录不一样
Date: Fri, 01 Jun 2018 05:31:02 GMT
Server: Apache/2.4.33 (Unix) PHP/7.2.5
Content-Type: text/html; charset=iso-8859-1
[root@aliyun ~]# curl -x
127.0.0.1:80
-I
www.test.com/
test/
test.php
HTTP/1.1
200 OK
Date: Fri, 01 Jun 2018 05:31:09 GMT
Server: Apache/2.4.33 (Unix) PHP/7.2.5
X-Powered-By: PHP/7.2.5
Cache-Control: max-age=0
Expires: Fri, 01 Jun 2018 05:31:09 GMT
Content-Type: text/html; charset=UTF-8
[root@aliyun ~]#
tail -2
/usr/local/apache2.4/logs/elon.org.cn-access_20180601.log
12.19.23.43
- - [01/Jun/2018:13:31:02 +0800] 180 "HEAD HTTP://
www.test.com/
test/
test.php
HTTP/1.1"
403
- "-" "curl/7.29.0"
127.0.0.1
- - [01/Jun/2018:13:31:09 +0800] 2304 "HEAD HTTP://
www.test.com/
test/
test.php
HTTP/1.1"
200
- "-" "curl/7.29.0"