executando o aplicativo node.js com nginx

4

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/default config:

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 essa configuração, posso acessar meu aplicativo por meio de

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

Perguntas:

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

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

    
por Markus 09.10.2015 / 19:28

2 respostas

2

Fácil. Como o seu node.js está rodando na porta 8443 e, até onde eu entendi, você não tem nenhum outro serviço escutando pedidos em outras portas, você pode simplesmente fazer isso na sua configuração 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 iptables, nem criar uma seção upstream em sua configuração nginx. nginx pode (e deve) fazer todo o redirecionamento de porta fora da caixa (como normalmente faz qualquer proxy reverso).

Eu posso estar errado, mas a razão pela qual seu aplicativo começa a funcionar depois das regras do iptables é porque seus clientes começam a acessar seu servidor node.js diretamente, devido ao redirecionamento de porta, que é semelhante a quando usamos o Squid como um transparente proxy.

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

Boa sorte e melhores cumprimentos!

    
por 09.10.2015 / 21:19
1

É um pouco inútil e inútil fazer criptografia em 127.0.0.1 entre o nginx e seu upstream, quando o seu upstream está sendo executado em 127.0.0.1 .

Se alguma coisa, sua solução com iptables redirect seria realmente muito mais eficiente do que simplesmente incluir o nginx no mix, sem nenhuma alteração no upstream.

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

A abordagem apropriada seria executar seu upstream sem https e redirecionar o http e o https para o upstream com nginx. A razão pela qual sua configuração atual não funciona provavelmente tem a ver com algum erro de configuração, o que não é óbvio a partir dos trechos que você colou até agora.

    
por 25.10.2015 / 04:15