executando o aplicativo node.js com nginx

executando o aplicativo node.js com nginx

Eu tenho um aplicativo de nó em execução na porta 8443. Meu nginx lida com as solicitações da web nas portas 80 e 443 e deve redirecionar o usuário para 8443.

aqui está minha /etc/nginx/sites-enabled/defaultconfiguração:

upstream my_upstream {
   server 127.0.0.1:8443;
   keepalive 64;
}

server {
    listen 80;
    server_name myapp.com;
    rewrite ^/(.*) https://myapp.com/$1 permanent;
}

server {
    listen 443 ssl;
    server_name 12.34.12.34 www.myapp.com myapp.com *.myapp.com;
    ssl_certificate /path/to/my/cert.crt;
    ssl_certificate_key /path/to/my/private.key
    // other ssl params

    location / {
        proxy_redirect off;
        proxy_pass https://my_upstream;
        // other params 
    }
}

com esta configuração posso acessar meu aplicativo via

http(s)://myapp.com:8443

somente quando eu adiciono os seguintes iptables

iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-ports 8443
iptables -t nat -A OUTPUT -p tcp --dport 443 -o lo -j REDIRECT --to-port 8443

eu posso acessar

http(s)://myapp.com

Questões:

Parece meio bobo redirecionar da porta 80 para 443 para 8443 usando iptables. Existe uma maneira de fazer isso apenas com o nginx (ou é esse o caminho a seguir?).

Essa abordagem (ter o aplicativo em uma porta não padrão como 8443) é uma boa ideia?

Responder1

Fácil. Como seu node.js está rodando na porta 8443 e, pelo que entendi, você não tem nenhum outro serviço escutando solicitações em outras portas, você pode simplesmente fazer isso na configuração do nginx:

server {
    # here comes the rest of your nginx configuration
    location / {
        proxy_pass http://127.0.0.1:8443;
    }
}

Você não precisa usar nenhuma regra de iptables nem criar uma seção upstream em sua configuração do nginx. O nginx pode (e deve) fazer todo o redirecionamento de porta pronto para uso (como normalmente qualquer proxy reverso faz).

Posso estar errado, mas o motivo pelo qual sua aplicação começa a funcionar após as regras do iptables é porque seus clientes passam a acessar seu servidor node.js diretamente, por causa do redirecionamento de porta, que é semelhante a quando usamos o Squid como proxy transparente.

Este artigo pode ajudá-lo. Ignore o fato de que foi endereçado ao Apache:

Boa sorte e cumprimentos!

Responder2

É um pouco inútil e um desperdício fazer criptografia 127.0.0.1entre o nginx e o seu upstream, quando o seu upstream está rodando em 127.0.0.1.

Na verdade, sua solução com iptablesredirecionamento seria na verdade muito mais eficiente do que simplesmente incluir o nginx na mistura, sem quaisquer alterações no upstream.

Mas temos que perguntar: se você não está usando nenhum recurso extra interessante do nginx, por que deseja adicioná-lo ao mix em primeiro lugar?

A abordagem adequada seria executar seu upstream sem httpse redirecionar http e https para o upstream com nginx. O motivo pelo qual sua configuração atual não funciona provavelmente tem a ver com algum erro de configuração, que não é óbvio pelos trechos que você colou até agora.

informação relacionada