我需要在nginx中获取安全链接,我在另一台服务器上获取数据。
我使用nginx secure_link进行一次服务器设置,如下所示:
location ~ \.mp4$ {
secure_link $arg_md5,$arg_expires;
secure_link_md5 "$secure_link_expires$uri$remote_addr secretkey";
if ($secure_link = "") {
return 403;
}
if ($secure_link = "0") {
return 410;
}
使用PHP构建网址。
function buildSecureLink($baseUrl, $path, $secret, $ttl, $userIp)
{
$expires = time() + $ttl;
$md5 = md5("$expires$path$userIp $secret", true);
$md5 = base64_encode($md5);
$md5 = strtr($md5, '+/', '-_');
$md5 = str_replace('=', '', $md5);
return $baseUrl . $path . '?md5=' . $md5 . '&expires=' . $expires;
}
$secret = 'secretkey';
$baseUrl = 'domain here';
$path = '/videos' . $video->id . '.mp4';
$ttl = 3600;
$userIp = $_SERVER["HTTP_CF_CONNECTING_IP"]; // since behind cloudflare
$vidurl = buildSecureLink($baseUrl, $path, $secret, $ttl, $userIp);
当数据在同一服务器中时,这很好用。但是,如果我尝试使用nginx中相同设置的secure_link来从该远程服务器流式传输(当然,使用正确的$ baseUrl和路径更新PHP部件),它根本无法工作。
有没有办法使用secure_link,其中实际数据(本例中的视频)在另一台服务器上?
答案 0 :(得分:0)
我的错误。搞定了。
忘记将以下内容添加到nginx conf中,这是使用Cloudflare获取真实用户ip所需的:https://support.cloudflare.com/hc/en-us/articles/200170706-How-do-I-restore-original-visitor-IP-with-Nginx-
比较nginx标头以找出它并注意到提供的IP是错误的。