Fiquei muito feliz quando a F5 anunciou a aquisição da NGINX há um ano, pois, como funcionário de longa data da F5, eu sabia que a NGINX se encaixaria perfeitamente. Essa impressão se confirmou quando, em uma de nossas primeiras reuniões conjuntas, os funcionários da NGINX falaram sobre algo muito importante para mim: o compromisso deles com a “comunidade”. Desde que entrei para a equipe da NGINX como gerente de produto, tive o prazer de ver esse compromisso na prática e a oportunidade de trabalhar mais de perto com a comunidade.
A comunidade NGINX está se unindo durante a pandemia de COVID-19
Nós que trabalhamos com código aberto normalmente usamos o termo “comunidade” para descrever as pessoas que apoiam um projeto de código aberto contribuindo com código. Embora sejam importantes, elas representam apenas uma pequena parte da comunidade NGINX. Quem são, então, os outros membros da comunidade? Também valorizamos aqueles de vocês que:
- Usam o NGINX nos projetos que compartilham no GitHub
- Conte com o NGINX para disponibilizar sites, aplicativos e APIs aos seus usuários com segurança
- Escreva posts de blog sobre como instalar e usar o NGINX
- Ajude usuários do NGINX em fóruns públicos
Nos últimos meses, os membros da comunidade NGINX realmente se uniram para apoiar uns aos outros e as muitas organizações que enfrentam dificuldades para manter suas operações durante a pandemia de COVID‑19. Muitos de vocês indicaram sites que poderiam se beneficiar do software NGINX ou até mesmo doaram tempo e conhecimento especializado sobre como ajustar o NGINX para obter o melhor desempenho. Como forma de fazermos a nossa parte, publicamos Recursos gratuitos para sites afetados pela COVID‑19 e ficamos muito felizes em ver a comunidade se mobilizar em torno dos novos usuários do NGINX.
Como parte de nossos esforços para ajudar as organizações a lidar com o aumento do tráfego e adicionar novas funcionalidades, temos fornecido até cinco instâncias gratuitas do NGINX Plus para organizações na linha de frente da pandemia. Entre elas estão prestadores de serviços de saúde, órgãos governamentais e – o mais relevante para este blog – escolas, universidades e organizações sem fins lucrativos voltadas à educação. Identificamos entre essas organizações um caso de uso em alta que provavelmente não vai surpreender você: streaming de vídeo!
Com escolas em todo o mundo fechando as portas e implementando rapidamente o ensino a distância, esperamos que o uso de streaming de vídeo aumente exponencialmente nas próximas semanas e meses. No restante deste blog, explico como você pode usar o NGINX Open Source e o NGINX Plus para oferecer streaming de vídeo estável, seguro e escalável.
Um grande agradecimento ao arquiteto de soluções técnicas da NGINX, James Jones, por gravar vídeos de demonstração para complementar este blog!
Transmissão de vídeo ao vivo e armazenamento de vídeos com o NGINX Open Source
Nossa solução para streaming de vídeo utiliza o módulo Real-Time Messaging Protocol (RTMP) para NGINX. Neste vídeo, James explica o processo passo a passo:
Para que você não precise fazer anotações enquanto assiste à demonstração do James, reunimos todos os comandos e configurações nas seções a seguir.
- Instalando as ferramentas de compilação
- Instalando dependências
- Compilando o NGINX com o módulo RTMP
- Configurando o NGINX
- Validando a configuração e iniciando o NGINX
- Testando os métodos de reprodução
Uma observação importante: não se esqueça da segurança!
As configurações do NGINX apresentadas neste blog não incluem medidas de segurança para restringir quem pode assistir à sua transmissão de vídeo. Há várias maneiras de proteger suas transmissões por meio do aplicativo de front-end que seus espectadores usam para assistir ao vídeo, como permitir o acesso somente a partir de determinados endereços IP ou exigir que os espectadores se autentiquem.
Instalando as ferramentas de compilação
Antes de compilar o NGINX, você precisa ter algumas ferramentas básicas de compilação instaladas: autoconf, gcc, git e make. Para baixá-las e instalá-las, execute o comando correspondente ao seu sistema operacional (se ele não estiver incluído aqui, consulte a documentação do fornecedor do sistema operacional).
- Para Debian e Ubuntu:
$ sudo apt update$ sudo apt install build-essential git- Para CentOS, Oracle Linux e RHEL:
$ sudo yum update$ sudo yum groupinstall "Development Tools"
$ sudo yum install gitInstalando dependências
A compilação do NGINX também requer várias dependências: Perl Compatible Regular Expressions (PCRE), OpenSSL e zlib para compactação.
Instalando dependências com um gerenciador de pacotes
A maneira mais fácil de baixar e instalar as dependências é usando um gerenciador de pacotes. Execute o comando correspondente ao seu sistema operacional (se ele não estiver incluído aqui, consulte a documentação do fornecedor do sistema operacional).
- Para Debian e Ubuntu:
$ sudo apt install libpcre3-dev libssl-dev zlib1g-dev- Para CentOS, Oracle Linux e RHEL:
$ sudo yum groupinstall pcre-devel zlib-devel openssl-develInstalando dependências a partir do código-fonte
Se, em vez disso, você quiser compilar e instalar as dependências a partir do código-fonte, consulte nossas instruções.
Compilando o NGINX com o módulo RTMP
Para concluir a compilação, clone os repositórios do GitHub do RTMP e do NGINX, execute o comando configure do NGINX e, em seguida, compile o NGINX.
$ cd /path/to/build/dir$ git clone https://github.com/arut/nginx-rtmp-module.git
$ git clone https://github.com/nginx/nginx.git
$ cd nginx
$ ./auto/configure --add-module=../nginx-rtmp-module
$ make
$ sudo make installConfigurando o NGINX
Você pode configurar o NGINX para transmitir vídeos usando um ou ambos os protocolos HTTP Live Streaming (HLS) e Dynamic Adaptive Streaming over HTTP (DASH). Os protocolos oferecem a mesma funcionalidade, portanto, a escolha entre eles é realmente uma questão de preferência. Se você não estiver familiarizado com eles, consulte HLS vs. DASH no blog da Vidbeo.
Configuração do HLS
Para HLS, a configuração é a seguinte. Na demonstração (aos 5:10), James explica a finalidade dessas diretivas.
rtmp { server {
listen 1935;
application live {
live on;
interleave on;
hls on;
hls_path /tmp/hls;
hls_fragment 15s;
}
}
}
http {
default_type application/octet-stream;
server {
listen 80;
location /tv {
root /tmp/hls;
}
}
types {
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
text/html html;
}
}Configuração do DASH
Para DASH, a configuração é a seguinte. Na demonstração, James combina HLS e DASH em uma única configuração, pois muitas diretivas são iguais para ambos os protocolos.
rtmp { server {
listen 1935;
application live {
live on;
dash on;
dash_path /tmp/dash;
dash_fragment 15s;
}
}
}
http {
server {
listen 80;
location /tv {
root /tmp/dash;
}
}
types {
text/html html;
application/dash+xml mpd;
}
}Validando a configuração e iniciando o NGINX
É sempre uma boa ideia validar a configuração do NGINX para garantir que não haja erros de sintaxe. Execute este comando:
$ sudo nginx -tnginx: the configuration file filename syntax is ok
nginx: configuration file filename test is successfulEm seguida, execute este comando para iniciar o NGINX:
$ sudo nginxTestando os métodos de reprodução
Inicie sua transmissão de vídeo. OBS Studio é uma ferramenta de código aberto amplamente utilizada que permite transmitir ao vivo da sua estação de trabalho para o servidor NGINX por meio da configuração de um servidor RTMP personalizado. Configure o OBS para transmitir para rtmp://NGINX_server/tv/tv2, em que NGINX_server é o endereço IP ou o nome do host do seu servidor NGINX. Não é necessária uma chave de transmissão.
James não usa o OBS na demonstração porque está transmitindo o vídeo de um arquivo, em vez de transmiti-lo ao vivo. Ele inicia a transmissão do vídeo (aos 9:30) executando o script stream.sh, que tem o seguinte conteúdo:
ffmpeg -re -I bbb_sunflower_1080p_60fps_normal.mp4 -vcodec copy -loop -1 -c:a aac -b:a 160k -ar 44100 -strict -2 -f flv rtmp:192.168.1.138/live/bbbThe video he is streaming (specified with the -I argument) is the open source Big Buck Bunny video from blender.org. For details about the other arguments, see the ffmpeg documentation.
Assim que o vídeo estiver sendo transmitido, você poderá testar se o NGINX está disponibilizando-o corretamente por meio dos protocolos configurados. James abre três instâncias do VLC media player e acessa a URL apropriada para cada método de reprodução. Nas URLs, NGINX_server é o endereço IP ou o nome do host do servidor NGINX dele:
- RTMP – rtmp://NGINX_server/live/bbb
- HLS – http://NGINX_server/live/bbb.m3u8
- DASH – http://NGINX_server/live/bbb.mpd
Aprimorando a experiência do usuário com o NGINX Plus
Se você estiver criando uma biblioteca de vídeos ou um curso, talvez precise de recursos que vão além do que é possível com o NGINX Open Source. O NGINX Plus inclui recursos avançados para melhorar o desempenho e a experiência do usuário final com módulos pré-compilados. Você pode:
- Ofereça suporte a uma escala maior armazenando vídeos em cache
- Ofereça serviços de vídeo sob demanda (VOD)
- Gerencie os custos e a capacidade do seu streaming limitando a largura de banda
Durante a pandemia de COVID‑19, a NGINX está oferecendo uma licença gratuita de um ano para até cinco instâncias do NGINX Plus a organizações dos setores de educação, administração pública e organizações sem fins lucrativos (sujeito a análise e aprovação). Para mais detalhes, consulte Recursos gratuitos para sites afetados pela COVID‑19.
Para incorporar o módulo RTMP ao NGINX Plus, carregue-o dinamicamente. Consulte o Guia de administração do NGINX Plus.
Nesta segunda demonstração, James mostra como é fácil configurar o NGINX Plus como balanceador de carga para três servidores de vídeo usando Ansible e Terraform:
Para acessar os arquivos que James usa na segunda demonstração, consulte o repositório dele no GitHub.
Estamos juntos nessa
Se você estiver com dificuldades para implementar streaming de vídeo ou qualquer outro caso de uso, estamos aqui para ajudar! Os funcionários da NGINX e a comunidade estão acompanhando o canal da NGINX no Stack Overflow1 e respondendo a perguntas e solicitações o mais rápido possível.
Se você trabalha para uma organização que está na linha de frente da pandemia e tem necessidades avançadas, talvez se qualifique para as licenças do NGINX Plus mencionadas acima, bem como para um nível superior do F5 DNS Load Balancer Cloud Service. Consulte Recursos gratuitos para sites afetados pela COVID‑19 para obter mais detalhes.
Confira também nesse blog um resumo de maneiras fáceis de melhorar o desempenho de sites usando recursos gratuitos da NGINX e da F5.
1O Stack Overflow é um site de terceiros e não é afiliado à F5, Inc. A F5 e suas afiliadas se isentam de qualquer responsabilidade pelo conteúdo (incluindo informações gerais e soluções propostas para perguntas) publicado no Stack Overflow ou em qualquer outro site de terceiros.
Sobre o autor
Publicações relacionadas no blog

Como o F5 NGINX One aprimora o gerenciamento e a observabilidade
Descubra como o F5 NGINX One aprimora o gerenciamento e a observabilidade de ambientes híbridos e multicloud ao oferecer um console web centralizado baseado em SaaS, com insights em tempo real, conformidade automatizada e gerenciamento simplificado de configurações.

Do OpenAPI ao NGINX como gateway de API usando uma API declarativa
Descubra como transformar uma definição de esquema OpenAPI em uma configuração NGINX totalmente funcional, operando como um API Gateway com a segurança de um Web Application Firewall e um Portal do Desenvolvedor, usando uma abordagem declarativa de API.

Como gerenciar picos repentinos de tráfego e sobrecarga do servidor
Picos de tráfego e sobrecarga de servidores são preocupações sérias para varejistas online em qualquer época, mas especialmente durante a “Cyber Season” de compras de fim de ano. Detalhamos como você pode aproveitar as soluções de entrega de aplicações de nível de produção da NGINX para se preparar para aumentos repentinos de tráfego.

Distribuição segura de chaves privadas SSL com o NGINX
Descrevemos três maneiras progressivamente mais seguras de proteger chaves privadas SSL ao configurar o NGINX para processar tráfego HTTPS: permitir acesso de leitura apenas ao usuário root, criptografar as chaves com senhas armazenadas separadamente e distribuir as senhas a partir de um repositório central.
Agrupando solicitações de API em lotes com NGINX Plus e o módulo JavaScript do NGINX
O módulo JavaScript do NGINX lançado com o NGINX Plus R15 oferece suporte a subsolicitações, possibilitando uma classe totalmente nova de casos de uso para o NGINX Plus. Este exemplo completo também usa a API do NGINX Plus e os módulos de chave-valor para converter solicitações de API dos clientes em solicitações separadas para as APIs dos microsserviços que compõem um aplicativo.
Como superar o esgotamento de portas efêmeras no NGINX e no NGINX Plus
Confira dicas para evitar o esgotamento de portas efêmeras com ajustes no kernel do Linux, conexões keepalive e conexões vinculadas dinamicamente a endereços IP locais.