2013-11-20 08:48:01
来 源
IT技术网
Nginx
本文介绍Nginx服务器中的防盗链配置,希望对于初学Nginx服务器相关的朋友有帮助,更多Nginx安装、配置、报错处理等资源请本站内搜索。。
前言

现在很多站长已经开始转向了VPS自建站,而在建站过程中,很多站长也比较倾向于Nginx作为WEB服务器使用,不过无论使用什么WEB软件,一般除国内、香港等几个地区外,几乎都有流量的限制,虽说VPS包含的流量大了,但是如果遇到有人将自己网站的图片等盗链到其他网站怎么办?

您难道愿意自己的流量白白的让给别人来使用么?很显然,没人原因!

当然,您可以选择我开发的“微博图床”将图片上传到微博中,您也可以选择七牛这样的云存储来降低您的流量,但是如果您都不想使用呢?很简单,如果您正在使用Nginx作为前端WEB服务器,那么跟着我操作,很快您就能配置一台能够抵御大多盗链的反盗链服务器了!

nginx accesskey

nginx accesskey是nginx下的一个反盗链模块,使用此模块后,所保护的文件必须以?key=xxxx类似的方式来进行访问,否则会返回403无权限代码,使用此模块可以轻松的配置一个简单的反盗链服务器。

不过使用此模块也有一些缺陷,那就是?key=xxx是固定不变的,每幅图都是同样的链接,这样是否能够很好的达到反盗链的目的呢?恐怕不行,所以,我们应该再加上一层保护,使用secure link。

secure link

secure link也是nginx下的一个反盗链模块,使用此模块后,可以自定义要保护的文件所需要提供的请求参数,比如过期时间什么的,与nginx accesskey模块搭配可以很好的解决网站盗链难题。

编译、安装

要配置防盗链,首先您需要下载相应的程序:

wget -c http://nginx.org/download/nginx-1.4.4.tar.gz

wget -c http://wiki.nginx.org/images/5/51/Nginx-accesskey-2.0.3.tar.gz

OK,下载完成后,首先将两个程序解压出来

tar zxvf nginx-1.4.4.tar.gz

tar zxvf Nginx-accesskey-2.0.3.tar.gz

然后我们进入nginx accesskey的目录修改以下配置文件

cd nginx-accesskey-2.0.3

vi config

将其中的

HTTP_MODULES="$HTTP_MODULES $HTTP_ACCESSKEY_MODULE"

修改为

HTTP_MODULES="$HTTP_MODULES ngx_http_accesskey_module"

然后返回进入到nginx目录

现在开始编译,编译参数按照自己的需求定义,不过需要增加两个参数

./configure --with-http_secure_link_module --add-module=../nginx-accesskey-2.0.3/

make && make install

nginx配置

安装之后,我们进入nginx配置目录对站点配置文件进行配置,在server模块下增加

location /wp-content/uploads {

accesskey on; #开启nginx accesskey

accesskey_hashmethod md5; #验证方式为MD5验证

accesskey_arg "key"; #连接参数为key

accesskey_signature "shuang.ca$remote_addr"; #验证字符串为shuang.ca加上$remote_addr

secure_link $arg_st,$arg_e; #设置sercure link的接收参数为st与e,st参数为base64字符串,e为过期时间

secure_link_md5 "shuang.ca$arg_e"; #验证字符串为shuang.ca加上参数e

if ($secure_link = "") { #若secure link字符串获取失败则返回403代码

return 403;

}

if ($secure_link = "0") { #若secure link字符串获取失败则返回403代码

return 403;

}

}

这样就配置好了,我们所保护的是/wp-content/uploads目录下的所有文件,若需要保护全部图片文件等,将location /wp-content/uploads做相应修改就可以了,不过不建议全站保护,否则您所有要保护的文件类型链接都必须要加上验证参数,这个就太累了!

使用

好了,我们已经配置好了,现在我站内的所有附件文件全部提示403了,那么现在要怎么使用呢?

这里以wordpress作为示例,首先编辑主题中的functions.php文件,在其中增加代码

// 附件防盗链

function shuangca_secure_media($content) {

preg_match_all('/<img .+src=['"]([^'"]+)['"].*/>/i', $content, $matches);

$key= md5("shuang.ca".$_SERVER['REMOTE_ADDR']);

$expire = time()+300; // 设置过期时间为300秒,超过时限则失效

$md5=str_replace( "=", "", strtr(base64_encode(md5("shuang.ca" . $expire, TRUE)), "+/", "-_")) . "n";

$content = str_replace( $matches[1][0], $matches[1][0] . '?token=' . $key . '&st=' . $md5 . '&e=' . $expire, $content);

return $content;

}

add_filter( 'the_content','shuangca_secure_media', 12 );

然后打开wp-includes下的media-template.php文件,找到

$class = 'media-modal wp-core-ui';

在下面增加

然后将所有的

<img src="{{ data.size.url }}"

修改为

<img src="http://shuang.ca/nginx-xia-de-zui-jia-fang-dao-lian-fang-shi/{{ data.size.url }}?key=<?php echo $key; ?/>&st=<?php echo $md5; ?>&e=<?php echo $expire; ?>"

现在再次测试,是不是已经成功了?而且还限制了过期时间,若是超过了时间再次访问就会自动失效,很不错吧?

声明: 此文观点不代表本站立场;转载须要保留原文链接;版权疑问请联系我们。