kleberweb Posted July 18, 2021 Posted July 18, 2021 olá galera blz! estou com um dedicado para hospedar alguns vídeos e instalei o nginx no centos 7. Quero saber como melhorar a entrega dos vídeos e colocar uma segurança do tipo fazer o link expirar depois de algumas horas. no momento estou usando o link direto para transmitir tipo http://ip/video.mp4 Alguém pode min ajudar com isso ? Obrigado desde de já galera. 0 Quote
Jaime Silva Posted July 19, 2021 Posted July 19, 2021 (edited) Existe o módulo Kaltura do Nginx para servir os vídeos em HLS e DASH sem precisar recodificá-los. Para proteção, você pode fazer uso do módulo Secure Link. Quando eu tiver um tempo, vou postar um exemplo de configuração para lhe ajudar. Você deve compilar o Nginx com os módulos assim 1) Copie o código do Github mkdir -p /usr/local/src/nginx cd /usr/local/src/nginx git clone https://github.com/kaltura/nginx-vod-module git clone https://github.com/kaltura/nginx-secure-token-module 2) Adicione estes parâmetros de configuração do Nginx: ./configure \ --add-module=/usr/local/src/nginx/nginx-secure-token-module \ --add-module=/usr/local/src/nginx/nginx-vod-module \ O exemplo a seguir, permite servir vídeos mp4 de forma segura. Estes vídeos ficam acessíveis em https://meusite.com.br/videos/alguma_coisa.mp4 location /videos { alias /home/videos; secure_link $arg_h,$arg_t; secure_link_md5 "$3Nh@Qu4Lqu3r | $uri | $secure_link_expires | $remote_addr"; secure_token "h=$arg_h&t=$arg_t"; if ($secure_link = "") { return 403; } if ($secure_link = "0") { return 410; } } Agora, no seu site, você precisa gerar o link para o vídeo de forma dinâmica, considerando o IP do visitante. Será um link único para cada visitante e que muda toda vez que a página é recarregada. $time = time() + 14400; $ip = $_SERVER['REMOTE_ADDR']; $pass = "$3Nh@Qu4Lqu3r"; $url = 'https://meusite.com.br/videos/alguma_coisa.mp4'; $link = get_secure_link($url, $pass, $time, $ip); function get_secure_link($link, $pass, $time = null, $ip = null, $ua = null) { $path = parse_url($link, PHP_URL_PATH); # Link simples, sem restrição e que nunca expira if ( $ip == null || $time == null ) { $parts = explode('/', $path, 3); $host = strstr($link, $path, true); $tmp = $parts[2] . $pass; $hash = md5($tmp); $url = $host . '/' . $parts[1] . '/' . $hash . '/' . $parts[2]; return $url; } # Link com limite de tempo e com restrição de IP $array = array($pass, $path, $time, $ip); if ($ua) $array[] = $ua; $tmp = implode(' | ', $array ); //$tmp = $time . ' | ' . $path . ' | ' . $ip . ' | ' . $ua . ' | ' . $pass; $sum = md5($tmp, true); $b64 = base64_encode($sum); $hash = str_replace(['+','/', '='], ['-','_',''], $b64); $url = $link . '?t=' . $time . '&h=' . $hash; return $url; } Para servir os vídeos em HLS ou DASH e ainda assim proteger contra acesso não autorizado, você deve fazer algumas mudanças na configuração do módulo Secure Link do Nginx, Edited July 20, 2021 by Jaime Silva 0 Quote Não há bem nem mal que dure para sempre. Um dia tudo acaba.
kleberweb Posted July 19, 2021 Author Posted July 19, 2021 Muito mais Muito obrigado mesmo amigo por sua ajuda amigo. mais na pasta onde meus videos são hospedado estão em /usr/share/nginx/html e são varias pasta diferentes com vídeos como por exe: filmes, series e novela. então como ficaria a configuração amigo? 0 Quote
Jaime Silva Posted July 19, 2021 Posted July 19, 2021 No código da config do Nginx acima, mude "alias /home/videos;" para "alias /usr/share/nginx/html;" Na hora de gerar o link, o caminho para o vídeo deve incluir a pasta, exemplo: Se o link é normalmente acessível em https://meusite.com.br/novelas/Imperio/Capitulo_1.mp4 Para gerar o link seguro, a URL a ser considerada é https://meusite.com.br/videos/novelas/Imperio/Capitulo_1.mp4 0 Quote Não há bem nem mal que dure para sempre. Um dia tudo acaba.
kleberweb Posted July 19, 2021 Author Posted July 19, 2021 tipo tenho mais de mil vídeos então vou ter que colocar um por um na $url = 'https://meusite.com.br/videos/alguma_coisa.mp4'; ? 0 Quote
Jaime Silva Posted July 20, 2021 Posted July 20, 2021 Sim, tem que mudar um por um. 0 Quote Não há bem nem mal que dure para sempre. Um dia tudo acaba.
msaulohenrique Posted July 20, 2021 Posted July 20, 2021 Pode usar $_GET tbm, vc chama o arquivo na url. 0 Quote
Jaime Silva Posted July 20, 2021 Posted July 20, 2021 (edited) E caso faça uso da minha sugestão, lembre-se de mudar a senha $3Nh@Qu4Lqu3r para uma outra. Esta senha é usada no vhost do Nginx e também no código para gerar o link protegido. A outra dica é usar um método mais seguro de obter o IP real do visitante, se seu site estiver sob um proxy tal como o Cloudflare. Edited July 20, 2021 by Jaime Silva 0 Quote Não há bem nem mal que dure para sempre. Um dia tudo acaba.
kleberweb Posted July 22, 2021 Author Posted July 22, 2021 não tem um modo de pegar todos os vídeos de uma pasta? colocar mais de 1 mil links um por um 0 Quote
msaulohenrique Posted July 26, 2021 Posted July 26, 2021 (edited) Em 20/07/2021 em 15:45, Jaime Silva disse: E caso faça uso da minha sugestão, lembre-se de mudar a senha $3Nh@Qu4Lqu3r para uma outra. Esta senha é usada no vhost do Nginx e também no código para gerar o link protegido. A outra dica é usar um método mais seguro de obter o IP real do visitante, se seu site estiver sob um proxy tal como o Cloudflare. Me referia a: $url = 'https://meusite.com.br/videos/'.$_GET["video"]; Logo ele pode usar www.site.com/arquivo.php?video=meuvideo.mp4 Edited July 26, 2021 by msaulohenrique 0 Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.