配置Nginx Secure Link并在Wordpress中使用

last modified : 2016-09-24 | published: 2016-01-15 | category:

secure link是一个略强力的防盗链措施,适用于一些深度防盗链的场合。 原理:ngx_http_secure_link_module 、谷歌、百度

Setp 1 安装并配置nginx

debian默认安装的nginx不包含ngx_http_secure_link_module,不过无大碍,因为官方源里还有个 nginx-extras。

apt-get remove nginx && apt-get install nginx-extras

在nginx的站点配置文件中,在需要保护的位置,增加secure_link配置,比如:

location ~*.(py|py3|go|cgi)$ {

    secure_link $arg_md5,$arg_expires;
    secure_link_md5 "secret$secure_link_expires$remote_addr";

    if ($secure_link = "") {
        return 403;
    }

    if ($secure_link = "0") {
        return 410;
    }
}

Setp 2 在Wordpress中生成校验值**

错误的方法:

有多个插件可以满足在Wordpress中执行php脚本的需求,比如Insert PHPPHP Code for posts,但:

正确的的方法

利用shortcode API创建一个简码来调用。 针对上文例子,可以新建并编辑<wordpress-dir>/wp-content/plugins/nginx_secure_link.php

<?php

/**
 * Plugin Name: Nginx Secure Link
 * Plugin URI:  https://liantian.me/2017/02/11/%e9%85%8d%e7%bd%aenginx-secure-link%e5%b9%b6%e5%9c%a8wordpress%e4%b8%ad%e4%bd%bf%e7%94%a8/
 * Description: Wordpress plugins for ngx_http_secure_link_module
 * Version:     0.1
 */

function secure_link_function() {

    if (isset($_SERVER["HTTP_CF_CONNECTING_IP"])) {
      $_SERVER['REMOTE_ADDR'] = $_SERVER["HTTP_CF_CONNECTING_IP"];
    }

    $secret = 'secret';
    $remote_addr = $_SERVER['REMOTE_ADDR'];
    $expire = time()+300;
    $md5 = base64_encode(md5($secret . $expire . $remote_addr, true));
    $md5 = strtr($md5, '+/', '-_');
    $md5 = str_replace('=', '', $md5);
    return '?expires='.$expire.'&md5='.$md5;
}

add_shortcode('secure_arg', 'secure_link_function');

?>

激活插件后,就可以在文章编辑过程中,可以使用[secure_arg] 为附件地址添加尾巴。 (其中获取IP的部分针对Cloudflare稍微处理了下)