Redirecionar domínios para portas diferentes na mesma máquina

1

Eu usei o seguinte comando para redirecionar 80 para 3000 . Todas as solicitações provenientes de qualquer domínio são redirecionadas para 3000 :

sudo iptables -t nat -I PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 3000

Tendo em processos: um que escuta em 80001 e outro que ouve em 8002 como posso ligar dois domínios às duas portas?

É possível ter uma configuração JSON como abaixo?

[
    {
       "port": 8001,
       "domains": ["example.com", "example2.com"] 
    },
    {
       "port": 8002,
       "domains": ["domain.com", "domain2.com"] 
    }
]

Então, domain.com , domain2.com enviará suas solicitações para o processo que ouve 8002 e os outros dois domínios em 8001 ?

    
por Ionică Bizău 19.08.2014 / 12:27

3 respostas

6

Geralmente, você precisa configurar seu servidor da Web com hosts virtuais e talvez < a href="http://httpd.apache.org/docs/2.2/mod/mod_proxy.html"> mod_proxy (para o Apache).

No entanto, eu sugiro que você use um proxy reverso, como haproxy , para cuidar disso. Configure o Haproxy para que ele escute a porta 80 e direcione seu tráfego para seus servidores da web usando ACLs no nome de domínio. Configure seu servidor da Web com hosts virtuais que atendem 127.0.0.1:8002 e 127.0.0.1:80001 (se o haproxy for executado no mesmo servidor).

Configuração bastante simples.

Veja este exemplo . É para colocar o haproxy na frente dos contêineres do Docker, mas você pode adaptar a configuração para atender às suas necessidades.

    
por 19.08.2014 / 15:20
1

Usando apache :

Este pode ser um ponto de partida simples - especialmente se você estiver considerando hospedar seus dois processos usando apache . Note que, como menciona @Tony, existem proxies mais eficientes disponíveis, que definitivamente valem a pena considerar se você não estiver usando apache para hospedar seus processos.

Você precisa encontrar o arquivo httpd.conf para sua distro em particular. Eles variam em nome e local, então você terá que ler os documentos ou o Google. O exemplo abaixo é baseado no CentOS 7 (executando apache v2.4)

No arquivo /etc/httpd/conf/httpd.conf , adicione:

<VirtualHost example.com:80>
    ProxyPass / http://localhost:8001
    ProxyPassReverse / http://localhost:8001
</VirtualHost>

<VirtualHost example2.com:80>
    ProxyPass / http://localhost:8001
    ProxyPassReverse / http://localhost:8001
</VirtualHost>

<VirtualHost domain.com:80>
    ProxyPass / http://localhost:8002
    ProxyPassReverse / http://localhost:8002
</VirtualHost>

<VirtualHost domain2.com:80>
    ProxyPass / http://localhost:8002
    ProxyPassReverse / http://localhost:8002
</VirtualHost>

Você precisará reiniciar (ou recarregar) apache para que ele leia a nova configuração.

Use o seu firewall para garantir que as portas 8001 e 8002 não sejam acessíveis de fora.

    
por 19.08.2014 / 16:19
0

Quando você usa o DNAT, é possível usar o seguinte comando:

iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 10.10.10.10:8001

iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 10.10.10.10:8002

Você precisa alterar 10.10.10.10 para sua máquina.

    
por 19.08.2014 / 14:00