nginx第三方模块的安装

一、安装前配置:

  1. ./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(最下方为下载地址)

  1. mkdir -p /usr/local/nginx/third-modules
  2. cd /usr/local/nginx/third-modules
  3. wget http://wiki.nginx.org/images/5/51/Nginx-accesskey-2.0.3.tar.gz
  4. tar -zxvf Nginx-accesskey-2.0.3.tar.gz
  5. ./configure --add-module=/usr/local/nginx/third-modules/nginx-accesskey
  6. mkdir -p /usr/local/nginx/third-moduels
  7. 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/

  1. wget http://www.openssl.org/source/openssl-1.0.2.tar.gz
  2. tar -zxvf tar -zxvf openssl-1.0.2.tar.gz
  3. cd openssl-1.0.2
  4. ./config --prefix=/usr/local/openssl
  5. make
  6. make install
(2)把openssl的include包放到/usr/local/include中
  1. cd /usr/local/openssl/include
  2. cp * /usr/local/include
(3)重新编译安装nginx:
  1. ./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;

  1. accesskey on;
  • (2)accesskey_arg :指定accesskey的参数

用法:accesskey_arg 参数;

如:

  1. accesskey_arg "sign";
  • (3)accesskey_hashmethod:用于加密的方法(加密算法,这里主要是md5和sha1)

用法:accesskey_hashmethod 加密算法

如:

  1. accesskey_hashmethod md5;
  • (4)accesskey_signature:用于加密的字符串

用法:accesskey_signature 用于加密的字符串

如:

  1. accesskey_signature "shixinke.com2015";
3、配置服务器nginx:

如我们的download目录是要下载的目录,时面有各种下载资源文件:

  1. location /download {
  2. accesskey on;
  3. accesskey_arg "sign";
  4. accesskey_hashmethod md5;
  5. accesskey_signature "shixinke.com2015";
  6. }
4、实验:

我们访问IP为200的机器,而200的机器上的资源是201上面的资源

  • (1)未开启防盗链前:

直接访问201上面的图片是可以的:

在200的机器上的某个文件(我们这里以download/index.php文件为例),在其中加入:

  1. <img src="http://192.168.18.201/download/icon.jpg"/>

访问200上的这个文件也是可以的:

  • (2)开启防盗链:在201机器上开启防盗链:

在配置文件中加入以下内容:

  1. location /download {
  2. accesskey on;
  3. accesskey_arg "sign";
  4. accesskey_hashmethod md5;
  5. accesskey_signature "shixinke.com2015";
  6. }

再刷新访问:

http://192.168.18.201/download/icon.jpghttp://192.168.18.200/download/index.php都访问不到这张图片了。

  • (3)让有权限的网站引用这张图片:

我们在index.php中引用这张图片时,加入accesskey_signature设置的值的md5值作为参数传递给目标资源:

  1. <img src="http://192.168.18.201/download/icon.jpg?sign=<?php echo md5('shixinke.com2015');?>"/>

现在就可以访问了,当然这里只是做测试,实际的情况可以通过更复杂的加密字符串来实现