一、安装前配置:
./configure --add-module=/usr/local/nginx/third_modules
二、使用第三方模块ngx_http_accesskey_module实现防盗链
原理:在服务端设置一个身份认证的私钥key(可以理解为密码),客户端下载时需要将这个参数传递给服务端,然后服务器对其进行判断
如果这个key与服务器端设置的一致,是认证通过,可以下载或访问,如果不正确,则抛出403错误或者其他提示
试验:有两台服务器192.168.0.239和192.168.0.240
- 239这客户机
- 240为服务器
1、、下载安装第三方模块
官网:http://wiki.nginx.org/HttpAccessKeyModule(最下方为下载地址)
mkdir -p /usr/local/nginx/third-modules
cd /usr/local/nginx/third-modules
wget http://wiki.nginx.org/images/5/51/Nginx-accesskey-2.0.3.tar.gz
tar -zxvf Nginx-accesskey-2.0.3.tar.gz
./configure --add-module=/usr/local/nginx/third-modules/nginx-accesskey
mkdir -p /usr/local/nginx/third-moduels
mv nginx-accesskey-2.0.3 /usr/local/nginx/third-modules/nginx-accesskey
修改下nginx-accesskey的config文件:
把$HTTP_ACCESSKEY_MODULE
修改成ngx_http_accesskey_module
发现配置时有几个提示:openssl模块未被使用,未发现sha1库,提示如下:
因此我们需要安装openssl这个库,并在nginx配置中添加openssl模块:
(1)下载或安装openssl库:
下载地址:http://www.openssl.org/source/
wget http://www.openssl.org/source/openssl-1.0.2.tar.gz
tar -zxvf tar -zxvf openssl-1.0.2.tar.gz
cd openssl-1.0.2
./config --prefix=/usr/local/openssl
make
make install
(2)把openssl的include包放到/usr/local/include中
cd /usr/local/openssl/include
cp * /usr/local/include
(3)重新编译安装nginx:
./configure --prefix=/usr/local/nginx --with-openssl=/usr/local/openssl --add-module=/usr/local/nginx/third-modules/nginx-accesskey
2、http_accesskey_module模块的主要指令
- (1)accesskey:是否开启accesskey
用法:accesskey on|off;
accesskey on;
- (2)accesskey_arg :指定accesskey的参数
用法:accesskey_arg 参数;
如:
accesskey_arg "sign";
- (3)accesskey_hashmethod:用于加密的方法(加密算法,这里主要是md5和sha1)
用法:accesskey_hashmethod 加密算法
如:
accesskey_hashmethod md5;
- (4)accesskey_signature:用于加密的字符串
用法:accesskey_signature 用于加密的字符串
如:
accesskey_signature "shixinke.com2015";
3、配置服务器nginx:
如我们的download目录是要下载的目录,时面有各种下载资源文件:
location /download {
accesskey on;
accesskey_arg "sign";
accesskey_hashmethod md5;
accesskey_signature "shixinke.com2015";
}
4、实验:
我们访问IP为200的机器,而200的机器上的资源是201上面的资源
- (1)未开启防盗链前:
直接访问201上面的图片是可以的:
在200的机器上的某个文件(我们这里以download/index.php文件为例),在其中加入:
<img src="http://192.168.18.201/download/icon.jpg"/>
访问200上的这个文件也是可以的:
- (2)开启防盗链:在201机器上开启防盗链:
在配置文件中加入以下内容:
location /download {
accesskey on;
accesskey_arg "sign";
accesskey_hashmethod md5;
accesskey_signature "shixinke.com2015";
}
再刷新访问:
http://192.168.18.201/download/icon.jpg
和http://192.168.18.200/download/index.php
都访问不到这张图片了。
- (3)让有权限的网站引用这张图片:
我们在index.php中引用这张图片时,加入accesskey_signature设置的值的md5值作为参数传递给目标资源:
<img src="http://192.168.18.201/download/icon.jpg?sign=<?php echo md5('shixinke.com2015');?>"/>
现在就可以访问了,当然这里只是做测试,实际的情况可以通过更复杂的加密字符串来实现