E aí, pessoal? Boas-vindas à Alura. Sou o Vinicius Dias e vou guiar vocês nesse nosso primeiro treinamento sobre NGINX. Antes de qualquer coisa nós vamos aprender o que é esse tal de NGINX, para quê ele serve, como ele funciona e quais problemas ele resolve.
E a partir dessa base teórica, entendendo qual o lugar do NGINX na web (afinal de contas ele é um servidor web), nós vamos começar a botar a mão na massa.
E quando começarmos a botar os conhecimentos em prática, nós vamos - obviamente depois de instalar o NGINX em cada uma das plataformas - configurar um servidor web. Esse servidor web vai saber responder diretamente a arquivos estáticos, sem passar por nenhuma outra aplicação.
Só que às vezes nós precisamos servir aplicações dinâmicas usando linguagens como PHP, Java, C Sharp, Python, Ruby, ou qualquer outra. Então nós vamos entender conceitos que nos permitem receber as requisições no NGINX e, caso necessário, vamos passar essas requisições para algum servidor de aplicação.
A partir disso, nós vamos entender conceitos como API Gateway, nós vamos aprender a fazer um load balancer e, enquanto implementamos esses detalhes, veremos alguns problemas que temos que atacar, como: configuração de logs, modificação do formato de logs e adicionar informações a esses logs padrões.
Então vamos ter bastante coisas para brincarmos. O melhor de tudo é que é de forma super simplificada! Você não precisa conhecer nenhuma linguagem de programação para realizar este treinamento. Tudo o que você precisa é conhecer o protocolo HTTP. Então se você fizer o treinamento de HTTP antes desse aqui, você já tem todos os conceitos e conhecimentos necessários.
Se você já sabe programar, e se você conhece alguma linguagem de programação a ponto de saber levantar um servidor de aplicação, perfeito! Melhor ainda. Porque você vai visualizar de forma mais prática como isso se aplica ao seu cenário - mas caso contrário, não tem problema nenhum porque não vamos precisar disso nesse treinamento.
A todo momento eu vou te informar: “olhe só, esse cenário aqui seria aplicável para nós utilizarmos um servidor de aplicação. Esse cenário, não precisamos de um servidor de aplicação”.
E dessa forma, quando você se deparar com uma demanda real - por exemplo: fazer deploy de um servidor Python, fazer deploy de uma aplicação PHP - aí você vai saber pesquisar as especificidades. "Como realizar proxy reverso para um servidor Python", por exemplo.
Então, dessa forma você vai ter todas as ferramentas necessárias para colocar uma aplicação web em produção. Obviamente, para isso você vai precisar ter uma aplicação. Então nesse ponto entra a programação, mas a parte de infraestrutura de um servidor web esse treinamento vai te prover.
Espero que você tire bastante proveito e que você aprenda muitas coisas. Já te adianto que não vamos conseguir cobrir tudo que o NGINX faz em um só treinamento, mas vamos aprender bastante coisas.
E se nesse amontoado de informações você ficar com alguma dúvida, não hesite. Você pode abrir um tópico lá no fórum. Eu tento responder pessoalmente sempre que possível, mas quando eu não consigo, nós temos uma vasta comunidade de alunos, moderadores, instrutores e com certeza alguém vai conseguir te ajudar.
Mas já falei bastante, vamos finalmente partir para a "prática" e conhecer o que é esse tal de NGINX! Vamos entender o que é, o que ele faz e como ele se encaixa na web no próximo vídeo.
Antes de instalarmos, configurarmos e utilizarmos o NGINX, antes de realmente conhecermos a parte prática, nós vamos entender um pouco da teoria. O que um NGINX faz e como ele faz. Então, vamos lá!
O NGINX é um servidor web. Ele é um serviço, é um programa que roda e que serve para responder requisições web. Então, é muito importante que você entenda como a web funciona. Por isso, o pré-requisito deste treinamento é o curso de HTTP. Você precisa entender o protocolo HTTP para saber qual é o papel do NGINX.
Então super simplificando milhares de conceitos que você já deve ter aprendido no curso de HTTP, a web funciona com uma arquitetura cliente-servidor. Temos aqui o cliente e o servidor, então imagine que o cliente é um navegador web; e nós temos um servidor rodando, uma aplicação em Java, em PHP, C Sharp, Python, Ruby ou a linguagem que for.
Então, o cliente vai digitar a URL do nosso site: “alura.com.br”, por exemplo, e ele vai fazer uma requisição para o computador que tem o nome “alura.com.br”.
Esse computador precisa saber receber essa requisição web e fazer o que tem que fazer - ou exibir o HTML, a imagem, devolver o arquivo CSS - ou então mandar para uma aplicação processar essa requisição. Uma aplicação em Java, em PHP, em Python ou no que for.
Essa tarefa de receber a requisição e decidir o que vai fazer, se vai mandar para uma aplicação, se vai devolver algum arquivo direto - essa é a tarefa de um servidor web.
Então é aí que entra o NGINX! Esse é o papel dele. O que o NGINX vai fazer dentro de um servidor é ficar ouvindo uma porta. Quando falamos de HTTP, a porta padrão é a “80”. Então se você não digita uma porta e está utilizando HTTP, essa requisição vai cair na porta 80.
Então um servidor web fica lá ouvindo, por exemplo, a porta 80 e ele fica esperando alguma requisição ou algum pedido entrar pedido chegar nesse computador. Quando chega, esse servidor web tem que saber o que fazer.
Então, ele vai analisar. Se o que você está pedindo parece ser um arquivo de imagem, então não preciso fazer nada com mais ninguém. Eu só vou te devolver essa imagem e o navegador vai exibir para você.
Você está me pedindo um arquivo estático, um arquivo de CSS? Então só vou te devolver, não preciso envolver ninguém nesse processo.
Agora, o que você está me pedindo aqui parece ser uma rota, uma URL, que precisa ser executada por uma aplicação, em PHP, Python ou Java.
Então o que ele faz é poder transferir a responsabilidade para algum servidor de aplicação. Esse servidor de aplicação pode estar, por exemplo, aberto ouvindo uma outra porta.
E esse servidor web manda uma outra requisição (não utilizando o protocolo HTTP, necessariamente, pode ser usando outro formato), mas ele manda esse pedido para o servidor de aplicação.
O servidor de aplicação processa, devolve para o servidor web, e o servidor web vai devolver para o cliente o que ele recebeu. Essa comunicação entre um servidor web e um servidor de aplicação pode ser feita de diversas formas. Então vamos focar, pelo menos no início, só nessa tarefa individual do servidor web tratando o que ele tem que tratar, de forma isolada.
Agora, caso você já seja uma pessoa que desenvolve sistemas e que você já conhece alguma linguagem, você já sabe como fazer um servidor de aplicação funcionar.
Então, por exemplo: com Java você pode ter um Tomcat rodando, ou com PHP você vai ter um PHP FPM rodando... Enfim. Você vai ter algum servidor de aplicação aqui, e o NGINX consegue se conectar à ele. Mas nós vamos focar só na parte do NGINX, sem nos conectarmos a algum servidor de aplicação.
O NGINX é um servidor web, ele ouve uma porta para responder requisições HTTP - mas já existiam outros servidores que fazem exatamente isso. Acredito que o mais famoso seja o Apache, muito provavelmente você já ouviu falar do servidor HTTP da Apache.
Qual é a grande diferença do NGINX? Simplificando também, a ideia do Apache era: você tem um servidor do Apache rodando processo do Apache. Quando chega uma requisição, esse processo cria um novo processo e trata essa requisição, depois mata esse processo e fica tudo certo.
Só que isso é muito custoso. Criar um processo, fazer a mudança de contexto de um processo para o outro e depois matar um processo. Isso é uma tarefa custosa. Então, o que o NGINX faz?
Ele não usa somente essa ideia de processos, threads e programação paralela, ele usa um outro conceito de programação assíncrona muito interessante - que eu vou simplificar aqui também para você entender o conceito por alto.
Então, temos aqui uma base do funcionamento do NGINX. Quando você inicia um serviço do NGINX, ele cria um processo principal como se fosse o patrão desses colaboradores aqui.
Então esse patrão vai criar alguns processos colaboradores, alguns worker process. Esses worker process são criados baseado no número de núcleos que o seu processador tem.
Suponha que eu tenho um servidor que tem um processador com quatro núcleos. Então eu poderia criar, por exemplo, 4 processos worker process para tratar requisições. Porque assim eu tenho um maior número de processos tratando cada número de requisições, então eu consigo tratar mais requisições.
Só que a sacada é: não é como se cada processo tratasse uma requisição. Não é isso! Cada um desses processos trata um número grande de requisições, várias requisições, e para que ele consiga tratar mais de um requisição, ele usa um conceito de Multiplexing I/O. Ou seja, ele faz mais de uma coisa de forma assíncrona.
Então imagine que chegou uma requisição nesse worker aqui e depois chega uma nova requisição que caiu nesse mesmo worker. O que ele vai fazer?
Ele vai colocar para executar o primeiro. Enquanto esse processo está esperando essa tarefa ser executada - por exemplo: o servidor de aplicação responder e o arquivo ser carregado - ele já trata outra requisição, coloca para carregar imagem e manda requisição para servidor de imagem.
Depois ele pega a resposta da primeira requisição e devolve, continua tratando a segunda e devolve. Por isso o NGINX veio com a proposta de ser o servidor web mais rápido.
Existem benchmarks que colocam realmente o NGINX lá no topo, ou seja, é um servidor muito performático. Mas obviamente não existe bala de prata e ele tem seus cenários onde ele trabalha muito bem e não é ferramenta ideal.
Vamos entender melhor como ele funciona durante esse treinamento, mas a base da funcionalidade dele é essa. Ele inicia um servidor, um processo. Esse processo cria outros processos colaboradores, e cada um desses processos consegue tratar várias requisições.
Utilizando esse conceito de programação assíncrona, ele consegue ter uma grande performance. Eu falei bastante da teoria, só que agora nós vamos partir para a prática. Vamos finalmente instalar o NGINX na nossa máquina e ver o que ele pode fazer por nós, no próximo vídeo!
Vamos falar sobre como nós podemos instalar o NGINX na nossa máquina.
Existem várias e várias formas de termos o NGINX rodando no nosso computador. Uma delas é, por exemplo, você utilizar containers. Então se você já conhece Docker, eu recomendo que você tente realizar essas etapas dentro de containers do Docker.
Mas para não ter esse conhecimento como pré-requisito, eu vou instalar diretamente na minha máquina.
Então se você utiliza Linux, você pode simplesmente executar, por exemplo, o comando sudo apt install nginx
. Ou utilizando o gerenciador de pacotes da sua distribuição Linux ao invés de apt
.
Se você está no Mac, você pode utilizar o Homebrew para instalar, então você pode digitar o comando brew install nginx
. Então um comando, NGINX instalado.
Já para quem utiliza o Windows, como essa é uma ferramenta de gestão de servidores e Windows não é tão usado em servidores web, nós vamos ter um trabalho a mais.
Vamos acessar o site https://www.nginx.org, que é o site oficial desse servidor web de código aberto. Você vai vir aqui no canto inferior direito em “download”. Aqui você tem, na mainline version a versão 1.19.9, que é a versão atual do momento da gravação desse curso.
Você pode utilizar qualquer versão que comece com o número 1. Se no momento que você estiver assistindo for 2 ponto alguma coisa, então o ideal é você pegar uma versão um pouco mais antiga, para garantir que as configurações que estamos fazendo aqui continuem funcionando.
Então você vai baixar esse arquivo que vai ser um ZIP, e você vai extrair esse ZIP em um caminho que seja de fácil acesso através do terminal. Idealmente um caminho que não tenha espaço no nome, porque o Windows costuma trazer bastantes problemas nesse cenário.
Então, por exemplo: dentro do seu disco “C:” você cria uma pasta “Servidor” ou “Server”, como você quiser. Você vai extrair desse ZIP e dentro dessa pasta vai ter o executável do NGINX. Ali dentro estarão os arquivos de configuração também.
Vamos falar bem mais sobre arquivo de configuração, mas feito esse processo de extração desse ZIP, você vai ter acesso ao comando NGINX desde que você esteja nessa pasta.
Então imagine que você extraiu em “C:\Servidor\NGINX”. Então você vai acessar com “cd”, que é change directory, ou seja, mudar o diretório. Você vai acessar a pasta pelo comando cd C:\servidor\nginx
.
E acessada essa pasta, você vai digitar simplesmente nginx
. Isso aqui é o suficiente para você inicializar o servidor. No meu caso ele deu um monte de erros, porque eu já tenho o servidor do NGINX rodando.
Então repare que ele mostrou aqui uma porta, que é a porta que vem configurada por padrão. Nós vamos falar bastante sobre arquivo de configuração, mas por padrão o nosso servidor vai subir na “8080”.
Tendo visto isso daqui, então digitei o comando nginx
no Linux, no Mac ou no Windows - nós temos um servidor rodando. Então, o que eu vou fazer? Aqui no meu navegador eu vou digitar https://localhost:8080. Agora temos uma mensagem: “bem-vindo ao NGINX”, e dessa forma nós temos o nosso servidor web instalado.
E o que aconteceu aqui para essa mensagem ser exibida? Temos um arquivo HTML que tem essa mensagem de bem-vindo e outras coisas; e nós fizemos uma requisição HTTP para a nossa própria máquina usando essa porta.
Então o NGINX está ouvindo essa porta aqui e ele está configurado para responder com esse HTML, ou seja, o nosso servidor web já está funcionando.
Claro, o que queremos fazer é colocar alguma aplicação real para ser exibida aqui, então não queremos ver somente a mensagem padrão do NGINX. Então a partir do próximo capítulo vamos começar a conhecer os arquivos de configuração do NGINX.
O curso NGINX: servidor Web, Proxy Reverso e API Gateway possui 89 minutos de vídeos, em um total de 40 atividades. Gostou? Conheça nossos outros cursos de Redes em DevOps, ou leia nossos artigos de DevOps.
Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:
Impulsione a sua carreira com os melhores cursos e faça parte da maior comunidade tech.
1 ano de Alura
Assine o PLUS e garanta:
Formações com mais de 1500 cursos atualizados e novos lançamentos semanais, em Programação, Inteligência Artificial, Front-end, UX & Design, Data Science, Mobile, DevOps e Inovação & Gestão.
A cada curso ou formação concluído, um novo certificado para turbinar seu currículo e LinkedIn.
No Discord, você tem acesso a eventos exclusivos, grupos de estudos e mentorias com especialistas de diferentes áreas.
Faça parte da maior comunidade Dev do país e crie conexões com mais de 120 mil pessoas no Discord.
Acesso ilimitado ao catálogo de Imersões da Alura para praticar conhecimentos em diferentes áreas.
Explore um universo de possibilidades na palma da sua mão. Baixe as aulas para assistir offline, onde e quando quiser.
Acelere o seu aprendizado com a IA da Alura e prepare-se para o mercado internacional.
1 ano de Alura
Todos os benefícios do PLUS e mais vantagens exclusivas:
Luri é nossa inteligência artificial que tira dúvidas, dá exemplos práticos, corrige exercícios e ajuda a mergulhar ainda mais durante as aulas. Você pode conversar com a Luri até 100 mensagens por semana.
Aprenda um novo idioma e expanda seus horizontes profissionais. Cursos de Inglês, Espanhol e Inglês para Devs, 100% focado em tecnologia.
Transforme a sua jornada com benefícios exclusivos e evolua ainda mais na sua carreira.
1 ano de Alura
Todos os benefícios do PRO e mais vantagens exclusivas:
Mensagens ilimitadas para estudar com a Luri, a IA da Alura, disponível 24hs para tirar suas dúvidas, dar exemplos práticos, corrigir exercícios e impulsionar seus estudos.
Envie imagens para a Luri e ela te ajuda a solucionar problemas, identificar erros, esclarecer gráficos, analisar design e muito mais.
Escolha os ebooks da Casa do Código, a editora da Alura, que apoiarão a sua jornada de aprendizado para sempre.