Ir para conteúdo
  • Cadastre-se

melhorias no nginx para vídeo!


Posts Recomendados

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.

Link para o comentário
Compartilhar em outros sites

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, 

 

 

Editado por Jaime Silva

Não há bem nem mal que dure para sempre. Um dia tudo acaba.

Link para o comentário
Compartilhar em outros sites

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

Não há bem nem mal que dure para sempre. Um dia tudo acaba.

Link para o comentário
Compartilhar em outros sites

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. 

Editado por Jaime Silva

Não há bem nem mal que dure para sempre. Um dia tudo acaba.

Link para o comentário
Compartilhar em outros sites

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

Editado por msaulohenrique
Link para o comentário
Compartilhar em outros sites

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Infelizmente, seu conteúdo contém termos que não são permitimos. Edite seu conteúdo para remover as palavras destacadas abaixo.
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...

Informação Importante

Concorda com os nossos termos?