nginxで安全なリンクを取得して、別のサーバーでデータを取得する必要があります。Nginx secure_linkを使用してリモートサーバーからストリームを送信する方法
次のように私はnginxののsecure_linkで1つのサーバー・セットアップを使用しています:
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;
}
URLを構築するために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を使ってそのリモートサーバからストリームしようとすると(当然のことながら、PHP部分が正しい$ baseUrlとpathで更新されます)、動作しません。
実際のデータ(ここではビデオ)が別のサーバーにある場合、secure_linkを使用する方法はありますか?