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/local
sejachown
o 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 nginx
iniciará 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 server
bloco. Parece algo como isto:
server {
listen 80;
server_name localhost;
....
more config goes here
}
Em seguida, configuraremos o server
bloco para atender às nossas necessidades. Queremos configurar o NGINX para passar todas as solicitações para o servidor Node.js. Substitua o server
bloco 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://localhost
porta 80
. O location /
bloco informa ao NGINX o que fazer com qualquer solicitação recebida. Nós usamos proxy_pass
para apontar para o nosso aplicativo Node.js, que está sendo executado em http://localhost:3000
no 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
e /etc/nginx/ssl/server.key
respectivamente, 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 location
bloco à configuração do servidor:
server {
listen 80;
server_name localhost;
location / {
...
}
location /public {
root /usr/local/var/www;
}
}
Dentro deste location
bloco, 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.html
diretamente.
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.