之前有个功能需要nginx的secure_link模块,无奈宝塔默认编译的Nginx不带这个模块,所以就需要手动编译并替换。
目前宝塔面板提供的最新Nginx是1.12.2,和官方稳定版一样。记录一下编译过程
说明
宝塔在默认编译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
p.s nginx 1.12.2已支持ipv6,不需要再单独指定–with-ipv6
upgrade完毕后,使用 nginx -V 命令 再次查看版本信息
可以看到secure_link模块已成功添加
网站中有下载压缩包等资源,但是这些资源都是对会员公开的,需要设定有效期。这里就需要做到防盗链的功能。
以前仅仅使用Referer验证,只能防止一些小白的盗链,对于一些工具来说一点用都没有。
但是在nginx下,可以使用secure_link
完美的来解决这个问题。这里针对的只是文件下载防盗链,不适用于图片的防盗链。
server {
listen 80;
server_name www.web1.com;
location / {
index index.html index.php index.html;
root /data/www;
}
location /video {
root /www/wwwroot;
#这里配置了2个参数一个是st,一个是e
secure_link $arg_st,$arg_e;
#st的哈希格式为 自定义秘钥+url+e,e为时间戳单位s,url为请求地址
secure_link_md5 yuxunyuqi520$uri$arg_e;
#这里我们的st是我们按照secure_link_md5的方式计算的哈希,secure_link会比对它计算的哈希值是否与我们的st参数一致
if ($secure_link = "") {
#资源不存在或哈希比对失败
return 402;
}
if ($secure_link = "0") {
#时间戳过期
return 404;
}
if ($request_filename ~* ^.*?\.(mp3|mp4|m4a|m3u8)$){
#直接下载防止打开文件 格式: (mp4|txt|jpg)
add_header Content-Disposition 'attachment;';
#如不下载则屏蔽上方代码
}
}
}
##其他配置省略##
......
}