Aguarde...

22 de março de 2020

Dica rápida: Configurando NGINX e SSL com Node.js

Dica rápida: Configurando NGINX e SSL com Node.js

O NGINX é um servidor HTTP de alto desempenho e um proxy reverso . Ao contrário dos servidores tradicionais, o NGINX segue uma arquitetura assíncrona e orientada a eventos. Como resultado, o espaço ocupado na memória é baixo e o desempenho é alto. Se você estiver executando um aplicativo Web baseado em Node.js., considere seriamente usar o NGINX como proxy reverso.

O NGINX pode ser muito eficiente no atendimento a ativos estáticos. Para todas as outras solicitações, ele conversará com o back-end do Node.js. e enviará a resposta ao cliente. Neste tutorial, discutiremos como configurar o NGINX para funcionar com o Node.js. Também veremos como configurar o SSL no servidor NGINX.

Instalando o NGINX

Supondo que você já tenha o Node.js instalado em sua máquina (caso contrário, verifique aqui ), vamos ver como instalar o NGINX.

Instalação no Linux

Se você estiver executando o Ubuntu, poderá usar o seguinte comando para instalar o NGINX:

sudo apt-get update
sudo apt-get install nginx

Se você estiver executando uma distribuição Linux diferente do Ubuntu, consulte os documentos de instalação do NGINX para obter mais informações.

O NGINX será iniciado automaticamente assim que for instalado.

Instalação no macOS

Se você estiver no macOS, poderá usar o Homebrew para instalar o NGINX facilmente. Os passos são os seguintes:

  • O Homebrew precisa que o diretório /usr/localseja chowno seu nome de usuário. Portanto, execute o seguinte comando no terminal primeiro:sudo chown -R 'username here' /usr/local
  • Agora, os dois comandos a seguir instalarão o NGINX no seu sistema:brew link pcre brew install nginx
  • Após a conclusão da instalação, você pode digitar o seguinte comando para iniciar o NGINX:sudo nginx
  • O arquivo de configuração NGINX pode ser encontrada aqui: /usr/local/etc/nginx/nginx.conf.

Instalação no Windows

No Windows, vá para a página de downloads do NGINX e obtenha o zip. A próxima etapa é descompactar o arquivo morto e mover para o diretório no prompt de comando da seguinte maneira:

unzip nginx-1.3.13.zip
cd nginx-1.3.13
start nginx

Como você pode ver, o comando start nginxiniciará o NGINX.

Agora que a instalação está concluída, vamos ver como você pode configurar um servidor simples.

Configurando um servidor Node.js

Primeiro, vamos criar um servidor Node.js. simples. Começaremos iniciando um projeto e instalando o pacote Express :

mkdir node-demo && cd node-demo
npm init -y
npm i express

Crie um arquivo chamado server.js, com o seguinte conteúdo:

const express = require('express')
const app = express()
const port = 3000

app.get('/', (req, res) => res.send('Hello World!'))

app.listen(port, () => console.log(`Example app listening on port ${port}!`))

Você pode iniciar o servidor executando node server.js.

Configurando o NGINX

Agora vamos abrir o arquivo de configuração do site padrão NGINX:

sudo nano /etc/nginx/sites-available/default

Se desejar, você pode ir diretamente para o diretório e abrir o arquivo de configuração com o seu editor de texto favorito.

Ao rolar para baixo, você encontrará um serverbloco. Parece algo como isto:

server {
  listen       80;
  server_name  localhost;

  ....
  more config goes here
}

Em seguida, configuraremos o serverbloco para atender às nossas necessidades. Queremos configurar o NGINX para passar todas as solicitações para o servidor Node.js. Substitua o serverbloco acima por um novo, conforme mostrado abaixo:

server {
  listen       80;
  server_name  localhost;

  location / {
    proxy_pass http://localhost:3000;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
  }
}

Como você pode ver, o servidor da Web escutará na http://localhostporta 80. O location /bloco informa ao NGINX o que fazer com qualquer solicitação recebida. Nós usamos proxy_passpara apontar para o nosso aplicativo Node.js, que está sendo executado em http://localhost:3000no nosso caso.

Nesse ponto, você deve salvar o arquivo e digite o seguinte para reiniciar o NGINX, dependendo do seu sistema operacional.

Ubuntu:

sudo service nginx restart

Ou:

sudo /etc/init.d/nginx restart

Mac OS:

sudo nginx -s stop && sudo nginx

Janelas:

nginx -s reload

Feito isso, você pode ir para http: // localhost para ver nosso proxy em ação. Embora esteja acessando o servidor da web NGINX, você obterá a resposta real do servidor Node.js.

Nota: você precisará garantir que não haja mais nada (como o Apache) em execução na porta 80.

Configurando SSL

Para criar uma conexão segura com o navegador de um usuário, precisamos obter um certificado digital. Normalmente, você obtém uma dessas informações de uma autoridade de certificação como Let’s Encrypt . Se você seguir a rota Let’s Encrypt, certifique-se de instalar o certificado usando o Certbot , que cuidará da reconfiguração do NGINX para você.

Para desenvolvimento local (e para acompanhar este tutorial), você também pode criar um certificado autoassinado . O único problema é que os navegadores mostrarão um aviso de que o “Certificado não é confiável” quando alguém visitar o seu site. Mas, para testar em sua máquina local, está perfeitamente bem.

Depois de ter um certificado e uma chave privada, você pode configurar o SSL no NGINX. Você precisa modificar nosso bloco de servidores anterior para o seguinte:

server {
  listen       80;
  listen       443 ssl;
  server_name  localhost;

  ssl_certificate  /etc/nginx/ssl/server.crt;
  ssl_certificate_key /etc/nginx/ssl/server.key;

  location / {
    proxy_pass http://localhost:3000;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
  }
}

É isso aí!

Agora, se você acessar https: // localhost , sua conexão estará segura. A configuração acima pressupõe que o certificado e a chave privada estão localizados em /etc/nginx/ssl/server.crt/etc/nginx/ssl/server.keyrespectivamente, mas você pode alterar esses locais, se desejar.

Bônus: veiculação de ativos estáticos

Um benefício adicional de ter o NGINX configurado na frente do servidor Node.js. é que podemos configurá-lo facilmente para atender a qualquer recurso estático exigido pelo aplicativo. Isso economizará a sobrecarga de passar por essas solicitações para o Node manipular.

Para fazer isso, precisamos adicionar um novo locationbloco à configuração do servidor:

server {
  listen       80;
  server_name  localhost;

  location / {
    ...
  }

  location /public {
    root /usr/local/var/www;
  }
}

Dentro deste locationbloco, configuramos a raiz como /usr/local/var/www, mas você pode escolher um diretório diferente, se quiser. Como resultado, sempre que houver uma solicitação para algo como http://localhost/public/somepath/file.html, o NGINX servirá o arquivo /usr/local/var/www/public/somepath/file.htmldiretamente.

Conclusão

Neste breve tutorial, vimos como usar o NGINX como um proxy reverso para nosso aplicativo Node.js. e configurar o SSL. Ao usar o NGINX para manipular os recursos estáticos, você também pode aliviar a carga do aplicativo Node.

Postado em Blog
Escreva um comentário