如果你服务器的文件或者其他一些资源不想被别人盗用,可以给资源链接上加一个key和时效,当时效过了,那么这个链接也就时效了,这样可以有效的防止别人调用你的资源。
nginx安装模块
查看nginx模块是否存在http_secure_link_module
[root@VM-0-8-centos /]# /www/server/nginx/sbin/nginx -V nginx version: nginx/1.18.0 built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) built with OpenSSL 1.1.1g 21 Apr 2020 TLS SNI support enabled configure arguments: --user=www --group=www --prefix=/www/server/nginx --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 --add-module=/www/server/nginx/src/nginx-sticky-module --with-openssl=/www/server/nginx/src/openssl --with-pcre=pcre-8.43 --with-http_v2_module --with-stream --with-stream_ssl_module --with-stream_ssl_preread_module --with-http_stub_status_module --with-http_ssl_module --with-http_image_filter_module --with-http_gzip_static_module --with-http_gunzip_module --with-ipv6 --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-cc-opt=-Wno-error --with-ld-opt=-ljemalloc --with-http_dav_module --add-module=/www/server/nginx/src/nginx-dav-ext-module
/www/server/nginx/src/下执行命令配置命令参数–with-http_secure_link_module
./configure --user=www --group=www --prefix=/www/server/nginx --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 --add-module=/www/server/nginx/src/nginx-sticky-module --with-openssl=/www/server/nginx/src/openssl --with-pcre=pcre-8.43 --with-http_v2_module --with-stream --with-stream_ssl_module --with-stream_ssl_preread_module --with-http_stub_status_module --with-http_ssl_module --with-http_image_filter_module --with-http_gzip_static_module --with-http_gunzip_module --with-ipv6 --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-cc-opt=-Wno-error --with-ld-opt=-ljemalloc --with-http_dav_module --add-module=/www/server/nginx/src/nginx-dav-ext-module --with-http_secure_link_module
编译
make objs/nginx.8 make[1]: Leaving directory `/www/server/nginx/src'
备份原来的nginx
cp /www/server/nginx/sbin/nginx /www/server/nginx/sbin/nginx.bak
替换原来的nginx
cp /www/server/nginx/src/objs/nginx /www/server/nginx/sbin/nginx
重启后查看nginx是否已存在该模块
/www/server/nginx/sbin/nginx -V configure arguments: --user=www --group=www --prefix=/www/server/nginx --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 --add-module=/www/server/nginx/src/nginx-sticky-module --with-openssl=/www/server/nginx/src/openssl --with-pcre=pcre-8.43 --with-http_v2_module --with-stream --with-stream_ssl_module --with-stream_ssl_preread_module --with-http_stub_status_module --with-http_ssl_module --with-http_image_filter_module --with-http_gzip_static_module --with-http_gunzip_module --with-ipv6 --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-cc-opt=-Wno-error --with-ld-opt=-ljemalloc --with-http_dav_module --add-module=/www/server/nginx/src/nginx-dav-ext-module --with-http_secure_link_modul
重启nginx遇到如下提示:/bin/sh: /usr/bin/nginx: Permission denied ,需要放开权限
nginx配置
location /m3u8 { #这里的/m3u8是要保护的路径 secure_link $arg_key,$arg_e; secure_link_md5 vlwx$uri$arg_e; #vlwx是密钥,可以自行修改 if ($secure_link = "") { return 403; # 密钥无效 } if ($secure_link = "0") { return 410; # 链接过期 } }
php生成加密链接
<?php $uri = "/test.m3u8"; // 文件路径 $expires = time() + 7200; // 设置链接有效期(比如一小时后过期) $secret = "vlwx"; // 必须与 Nginx 配置中的密钥相同 $key = base64_encode(md5($secret . $uri . $expires, true)); $key = strtr($md5, '+/', '-_'); $key = str_replace('=', '', $md5); $url = "http://vlwx.com$uri?key=$key&e=$expires"; echo $url; ?>
这里不知道为什么直接用md5生成的密钥过不去NG的验证,可能是环境版本问题,所以这里用base64来生成key