Jump to content

melhorias no nginx para vídeo!


Recommended Posts

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 to comment
Share on other 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, 

 

 

Edited by Jaime Silva

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

Link to comment
Share on other sites

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?

Link to comment
Share on other 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 to comment
Share on other 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. 

Edited by Jaime Silva

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

Link to comment
Share on other 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

Edited by msaulohenrique
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...

Important Information

Do you agree with our terms?