每一个你不满意的现在,都有一个你不努力的曾经。

宝塔面板编译Nginx secure_link模块、防盗链


关于宝塔编译Nginx


  • 宝塔在默认编译nginx后,会保留源码,及必要的模块源码(如ngx_cache_purge),所以编译时无需再次下载
  • 默认安装脚本:/www/server/panel/install/nginx.sh
  • nginx源码目录:/www/server/nginx/src/

如:给nginx添加secure_link模块


编译时长根据环境硬件而定,一般600~900秒左右,建议开启screen编译

cd /www/server/nginx/src/
./configure --user=www --group=www --prefix=/www/server/nginx --with-openssl=/www/server/nginx/src/openssl --add-module=/www/server/nginx/src/ngx_devel_kit --add-module=/www/server/nginx/src/lua_nginx_module --add-module=/www/server/nginx/src/ngx_cache_purge --with-http_stub_status_module --with-http_ssl_module --with-http_v2_module --with-http_gzip_static_module --with-http_gunzip_module --with-stream --with-stream_ssl_module --with-http_sub_module --with-http_flv_module --with-http_addition_module --with-http_realip_module --with-http_mp4_module --with-ld-opt="-Wl,-E" --with-http_secure_link_module
make
rm -f /www/server/nginx/sbin/nginx.old
mv /www/server/nginx/sbin/nginx /www/server/nginx/sbin/nginx.old
cp objs/nginx /www/server/nginx/sbin/nginx
make upgrade

ps: nginx 1.12.2已支持ipv6,不需要再单独指定–with-ipv6 upgrade完毕后,使用 nginx -V 命令 再次查看版本信息

可以看到secure_link模块已成功添加

设置nginx location


location ~ .*\.(m3u8|swf|txt)$
{
    secure_link $arg_st,$arg_e;
    #segredo为密码样例
    secure_link_md5 segredo $uri$arg_e; 
    if ( $secure_link = "" ) {
    return 402;
    }
    if ( $secure_link = "0" ) {
    return 405;
    }
}

Demo


$secret = 'segredo'; // secrets

$path   = '/aaa.txt'; // ?f=path

$expire = time()+10; // add ? seconds to be available,这里是10秒内访问有效

$md5 = base64_encode(md5($secret . $path . $expire, true)); // Using binary hashing.

$md5 = strtr($md5, '+/', '-_'); // + and / are considered special characters in URLs, see the wikipedia page linked in references.

$md5 = str_replace('=', '', $md5); // When used in query parameters the base64 padding character is considered special.

$url = $request->url()."$path?st=$md5&e=$expire";  //安全下载链接可以直接echo输出

echo "<a href="%24url"> 点击 </a>";

dd($url,date('Y-m-d H:i:s'));
Card image cap

每一个你不满意的现在,都有一个你不努力的曾经。