Nginx
nginx.conf
location ^~ /secure/img/ {
#secure_link $arg_md5,$arg_expires;
#url?key=xxx&e=xxx
#secure_link_md5 "sbdx_$secure_link_expires";
#key生成规则
secure_link $arg_md5,$arg_expires;
secure_link_md5 "$secure_link_expires$uri$remote_addr secret";
if ($secure_link = "") {
return 403;
}
if ($secure_link = "0") {
return 410;
}
}
index.php
<?php
for ($i = 1; $i <= 6; $i++)
{
$url = "/secure/img/{$i}.jpg";
$e = time() + 10; //到期时间
$key = "{$e}{$url}127.0.0.1 secret"; //这里与nginx.conf的secure_link_md5相对应
$md5 = base64_encode(md5($key, true)); //MD5第二个参数是关键,返回原始二进制数据
$md5 = strtr($md5, '+/', '-_');
$md5 = str_replace('=', '', $md5);
$url .= "?md5={$md5}&expires={$e}";
echo "加密访问地址:<a href='{$url}' target='_blank'>{$url}</a> <br>";
echo "<img src='{$url}' /> <br>\n";
}
?>
被MD5第二个参数搞死了,折腾了好久才发现是这里的问题,True表示 MD5 报文摘要将以16字节长度的原始二进制格式返回
参考文档:http://nginx.org/en/docs/http/ngx_http_secure_link_module.html