Node.js é uma ferramenta vital para quase todos os tipos de desenvolvimento e entrega baseados em microsserviços. É também a ferramenta líder para a criação de aplicativos de servidor em JavaScript e oferece a funcionalidade de um servidor da web e de um servidor de aplicativos.

Mas o Node.js tem algumas deficiências e vulnerabilidades que podem causar desempenho insatisfatório ou até mesmo travar dentro Aplicativos baseados em nó. Por exemplo, os aplicativos da web baseados em Node.js são propensos a lentidão na execução do código ou até mesmo travamentos devido a operações vinculadas a IO ou rápido crescimento do tráfego. Eles também às vezes têm dificuldade em fornecer conteúdo estático, como imagens e arquivos JavaScript, e balanceamento de carga em vários servidores.

Felizmente, você pode conteúdo estático em cache , proxy e balanceamento de carga entre vários servidores de aplicativos e gerencie a contenção de porta entre clientes usando Nginx. Isso torna o Nginx uma excelente ferramenta para aumentar o desempenho do Node.js.

Neste tutorial, mostraremos como executar um servidor com o Nginx. Cobriremos a instalação e configuração do Nginx construindo um aplicativo Node.js. simples.

Para acompanhar, você deve ter:

Uma compreensão de como a web, os servidores da web e a web navegadores comunicam conhecimento básico de JavaScript, Node.js e programação assíncrona Node.js instalado em sua máquina local Editor de texto Vim instalado em seu dispositivo local

Para demonstrar como o Nginx funciona na prática, construiremos um aplicativo Node.js simples que será executado na porta 3000, que é uma porta comum para a execução de aplicativos Node. As mesmas técnicas devem funcionar para qualquer outra porta disponível em sua máquina local.

O que são servidores e servidores web?

Um servidor é um computador que se comunica com outros computadores para atendê-los com as informações solicitadas por esses computadores. Esses computadores, também chamados de clientes, se conectam a um servidor por meio de uma rede local (LAN) ou de uma rede remota (WAN). Um servidor envia e coleta informações em uma rede em vários locais.

O servidor na web, conhecido como servidor web, por meio do protocolo de transferência de hipertexto (HTTP), recebe solicitações de um cliente pela Internet, como o navegador, e retorna uma resposta HTTP, seja como uma página da web HTML ou em um formato JSON como com chamadas de APIs.

Os servidores da web são a base de qualquer troca de dados usando HTTP como protocolo cliente-servidor para comunicação com outros computadores. Um servidor web como um computador envolve hardware e software e é um componente fundamental no desenvolvimento web. O lado do software compõe as partes que entendem URLs e controlam como os usuários da web acessam arquivos hospedados.

O que é Nginx?

De acordo com a documentação, Nginx (pronuncia-se“ mecanismo X ”) é um servidor HTTP e proxy reverso, um servidor proxy de e-mail e um genérico Servidor proxy TCP/UDP, originalmente escrito por Igor Sysoev.

O NginX é usado para uma variedade de tarefas que contribuem para melhorar o desempenho do Node.js. Os principais recursos incluem:

Servidor proxy reverso -À medida que o tráfego para seu aplicativo aumenta, a melhor abordagem para melhorar o desempenho é usar o NginX como um servidor proxy reverso na frente do servidor Node.js para tráfego de equilíbrio de carga entre os servidores. Este é o principal caso de uso do NginX em aplicativos Node.js Balanceamento de carga sem estado -Isso melhora o desempenho enquanto reduz a carga nos serviços de back-end, enviando solicitações do cliente para serem atendidas por qualquer servidor com acesso ao arquivo solicitado Conteúdo estático do cache -Servir conteúdo estático em um aplicativo Node.js e usar o NginX como um servidor proxy reverso dobra o desempenho do aplicativo para um máximo de 1.600 solicitações por segundo Implementar SSL/TLS e HTTP/2 -Dada a recente mudança do uso de SSL/TLS para proteger as interações do usuário em aplicativos Node.js, o NginX também oferece suporte a conexões HTTP/2 Rastreamento de desempenho -Você pode manter guias em tempo real o desempenho geral de seu aplicativo Node.js usando as estatísticas fornecidas nos painéis ao vivo do NginX Escalabilidade -Dependendo de quais ativos você está servindo, você pode aproveitar as vantagens do HTTP, TCP e UDP completo balanceamento de carga em NginX para aumentar seu aplicativo Node.js

O Nginx atualmente oferece suporte a sete linguagens de script: Go, Node.js, Perl, PHP, Python, Ruby e Java Servlet Containers (o último é um módulo experimental). Ele permite que você execute aplicativos escritos em diferentes idiomas no mesmo servidor.

Instalando o Nginx

Instalaremos o Nginx usando o gerenciador de pacotes padrão para um sistema operacional baseado em Debian, que é chamado de apt . O Nginx também está disponível para quase todos os sistemas operacionais em seus repositórios padrão.

Antes de instalar o Nginx, certifique-se de ter instalado os pré-requisitos para o Ubuntu OS .

Posteriormente no tutorial, configuraremos o Nginx com base nas necessidades exclusivas de nosso projeto e, em seguida, estaremos prontos para implementá-lo.

Agora vamos instalar o Nginx usando o apt.

sudo apt update sudo apt install nginx

Com uma instalação bem-sucedida, a seguinte mensagem deve ser exibida no terminal, confirmando que o Nginx foi instalado:

Obrigado por usar o nginx! Encontre a documentação oficial do nginx aqui: * https://nginx.org/en/docs/

Antes de configurar o Nginx, vamos configurar e construir rapidamente nosso aplicativo Node.js.

Criando um Aplicativo Node.js

Para este aplicativo Node.js simples, estaremos construindo um servidor Node.js com o módulo HTTP fornecido pelo Node.js. Vamos começar criando uma pasta e inicializando o projeto no terminal:

mkdir’projeto do servidor nginX’cd’projeto do servidor nginX’npm init-y

O código acima criará a pasta do projeto do servidor nginX e alterará o diretório para a pasta. Em seguida, inicializamos um aplicativo Node.js com npm, usando o sinalizador-y para definir “sim” como a resposta padrão para todas as perguntas.

A próxima etapa é criar o arquivo server.js que contém o código-fonte do nosso aplicativo e abri-lo com qualquer IDE ou editor de texto de sua escolha:

touch server.js vim server.js #ou code.

Agora é hora de construir e iniciar o servidor. Vamos definir dois subdomínios extras como um meio de testar se nosso aplicativo está totalmente funcional:

const http=require (“http”); const server=http.createServer ((req, res)=> {const urlPath=req.url; if (urlPath===”/visão geral”) {res.end (‘Bem-vindo à”página de visão geral”do projeto nginX’);} else if (urlPath===”/api”) {res.writeHead (200, {“Content-Type”:”application/json”}); res.end (JSON.stringify ({product_id:”xyz12u3″, product_name:”NginX injector”,}));} else {res.end (“Servidor iniciado com sucesso”);}}); server.listen (3000,”localhost”, ()=> {console.log (“Listening for request”);});

Criamos um servidor com um módulo HTTP Node.js que importamos usando a função require no código acima. Em nosso servidor, renderizaremos duas respostas diferentes, dependendo de nossa rota atual. As duas rotas são/overview e/api.

No subdomínio/overview, renderizaremos um texto simples, enquanto na/api renderizaremos um objeto JSON. Nosso domínio padrão com o endereço 127.0.0.1:3000, juntamente com as duas rotas que criamos, nos ajudará a entender melhor como o Nginx funciona.

Vamos configurar o Nginx para testar o nosso servidor a partir do terminal.

Configurando o Nginx

No final do processo de instalação que vimos anteriormente, o Ubuntu 20.04 iniciou o Nginx. O servidor já deve estar instalado e funcionando.

Abra seu navegador e navegue até o endereço IP do servidor, onde você pode acessar a página de destino Nginx padrão para confirmar se o software está funcionando corretamente.

Para que o Nginx escute a porta 3000 de nosso aplicativo Node.js, mudaremos o diretório para/etc/nginx/sites-available, onde criaremos um bloco de servidor para conter a configuração com o diretivas corretas apontando para a porta 3000:

cd/etc/nginx/sites-available sudo cp default myserver

Depois de alterar o diretório para/etc/nginx/sites-available, o segundo comando irá copiar e colar o conteúdo das configurações padrão do Nginx em um novo arquivo chamado myserver .

Em seguida, abra o arquivo e adicione as diretivas apropriadas à porta 3000:

sudo vim/etc/nginx/sites-available/myserver

Cole na seguinte conf bloco de configuração, que é semelhante ao padrão, mas atualizado para a porta 3000:

#O servidor de instância do servidor Nginx {ouvir 0.0.0.0:80; server_name localhost; localização/{proxy_set_header X-Real-IP $ remote_addr; proxy_set_header X-Forwarded-For $ proxy_add_x_forwarded_for; proxy_set_header Host $ http_host; proxy_set_header X-NginX-Proxy true; proxy_pass http://127.0.0.1:3000/; proxy_redirect off; } localização/visão geral {proxy_set_header X-Real-IP $ remote_addr; proxy_set_header X-Forwarded-For $ proxy_add_x_forwarded_for; proxy_set_header Host $ http_host; proxy_set_header X-NginX-Proxy true; proxy_pass http://127.0.0.1:3000/overview; proxy_redirect off; } localização/api {proxy_set_header X-Real-IP $ remote_addr; proxy_set_header X-Forwarded-For $ proxy_add_x_forwarded_for; proxy_set_header Host $ http_host; proxy_set_header X-NginX-Proxy true; proxy_pass http://127.0.0.1:3000/api; proxy_redirect off; }}

Salve as alterações e saia do arquivo. Observe que criamos mais três locais no arquivo de configuração acima, correspondendo aos caminhos predefinidos em nosso aplicativo Node.js.

Para a próxima etapa, vamos ativar o arquivo acima criando um link a partir dele para o diretório habilitado para sites, que o Nginx lê durante a inicialização:

sudo ln-s/etc/nginx/sites-available/myserver/etc/nginx/sites-enabled/

O bloco do servidor agora está habilitado e configurado para retornar respostas a solicitações com base na porta de escuta e nas diretivas da porta atual.

Agora é hora de iniciar nosso aplicativo Node.js e o serviço Nginx para efetuar as alterações recentes. Mas primeiro, vamos verificar o status do Nginx para confirmar se a configuração está funcionando corretamente:

sudo nginx-t

A saída após a execução do comando acima seria semelhante a:

nginx: o arquivo de configuração A sintaxe de/etc/nginx/nginx.conf está ok nginx: o teste do arquivo de configuração/etc/nginx/nginx.conf foi bem-sucedido

A saída acima confirma que nossa configuração foi bem-sucedida. Em seguida, pare e reinicie o Nginx para habilitar suas alterações. O Nginx é iniciado na instalação por padrão.

sudo systemctl restart nginx

Se o Nginx não iniciar automaticamente por algum motivo, o comando para iniciá-lo é:

sudo systemctl start nginx

Abra um novo terminal e altere o diretório para o aplicativo Node.js. Agora inicie seu aplicativo usando o seguinte comando:

node server.js

Abra seu navegador e acesse o aplicativo Node.js. O Nginx atualmente deve atender às portas do aplicativo que foram definidas no arquivo de configuração. Você pode testar isso navegando para localhost/visão geral:

Para que a porta padrão 127.0.0.1 funcione em nosso aplicativo Node.js, precisamos editar a configuração padrão do Nginx para apontar para outra porta. Usaremos a porta 127.0.0.1:8080. Mude o diretório para/etc/nginx/sites-available/e edite o arquivo padrão da seguinte maneira:

… server {listen 8080 default_server; listen [::]: 8080 default_server;…}…

Agora podemos navegar para o endereço 127.0.0.1 no navegador e acessar a porta inicial: 3000 de nosso aplicativo:

Para testar ainda mais que cada outro caminho que definimos está funcionando, vamos tentar o último caminho,/api:

Conclusão

Neste tutorial, aprendemos como configurar o Nginx como um servidor Node.js para aplicativos de back-end.

Construímos um aplicativo Node.js simples usando Node.js e Nginx. Em seguida, configuramos o Nginx para ouvir a porta 3000 e servir os conteúdos predefinidos em nosso aplicativo Node.js no navegador.

O Ngnix é uma ótima ferramenta para entrega de aplicativos da web, fornecendo desempenho e escalabilidade em ambos as camadas ADC e de servidor da web.