Como executar um servidor express (node) usando o nginx

Possuo o seguinte código de uma aplicação express (node, nodejs):

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

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

app.listen(port, () => console.log(`Server listening at http://localhost:${port}`))

E desejo utilizar o nginx para servir a aplicação via localhost.

Para isso vai ser necessário ter o nginx instalado e funcionando

Quando ele tiver exibindo a página padrão como abaixo:

Então basta fazer a configuração do nginx da seguinte forma:

Edite o arquivo /etc/nginx/sites-available/default

Para ter o seguinte conteúdo:

server {
    listen 80 default_server;
    server_name _;

location / {
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_pass http://localhost:3000; #porta onde estã servindo a aplicação express.

  }
}

Repare que acima estou supondo que está servindo a aplicação express na porta 3000. Então faça a configuração correspondente caso esteja utilizando outra porta..

Após ter salvo as alterações para se certificar de que as mudanças que fizemos estão corretas (do ponto de vista de sintaxe), vamos executar um comando nginx -t, ele vai fazer o parse do arquivo para verificar se não existem erros de sintaxe no arquivo.

sudo nginx -t

A saída esperada para este comando é a seguinte:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Após verificar que a sintaxe está correta, podemos reiniciar o nginx, para ele começar a servir as nossas mudanças, para isso basta utilizar o comando:

sudo nginx -s reload

Após reiniciar o nginx, agora ao acessar via browser, você verá o conteúdo que o express está exibidndo sendo servido pelo nginx.

Caso não tenha visto os resultados esperados, consulte a documentação:

nginx