Iptables: como redirecionar a porta 80 apenas para um domínio específico

4

desculpa pelo título, mas sou tão novato nas configurações do servidor. Eu tenho um problema (é claro) e vou tentar o meu melhor para explicar para você:

  • Eu tenho um vps, debian com base no apache2 e nele eu tenho dois domínios configurados com virtualhost.
  • o primeiro domínio é usado para ser o alias de um servidor da Web (RUBY) e está trabalhando com a porta 8080
  • um segundo é um site, então é suposto estar trabalhando com a porta 80, com apache2 + mysql

Meu problema é que o servidor web precisa redirecionar as conexões da porta 80 para 8080, então meu desenvolvedor ruby (não eu, eu sugo em ruby) fez um redirecionamento com

iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080

como um sucesso meu site não está funcionando com a porta 80, é claro.  minha pergunta: existe uma maneira de dizer ao iptables para redirecionar a porta 80 apenas para a conexão com o servidor ruby (e, portanto, o primeiro domínio?) Não consigo alterar a porta do servidor, então como você me sugere para usar o 80 para o site? desculpe pelas perguntas tolas, mas eu sugiro totalmente isso. Esqueci de mencionar que não estou mais em contato com o desenvolvedor de rubis, então isso torna as coisas mais dramáticas para mim:)

obrigado antecipadamente

    
por Simone 01.08.2012 / 00:57

1 resposta

5

Se você estiver veiculando os dois domínios do mesmo IP, não poderá fazer isso com o encaminhamento de porta, porque o iptables não tem como saber a qual domínio o cliente está tentando se conectar. Seu servidor não está envolvido na pesquisa de DNS, e o cliente não envia um cabeçalho Host: de HTTP até após a conexão TCP ter sido estabelecida.

O que você pode fazer, no entanto, é usar o mod_proxy do Apache para configurar um proxy reverso que retransmite solicitações HTTP para o servidor Ruby. Esta receita mostra como:

<VirtualHost *:*>
    ProxyPreserveHost On
    ProxyPass / http://localhost:8080/
    ProxyPassReverse / http://localhost:8080/
    ServerName your.ruby.site
</VirtualHost>

Com essa configuração, as pessoas que visitam o site Ruby não estarão se conectando ao servidor Ruby; elas se conectarão ao Apache. Mas o Apache servirá as páginas solicitando-as do servidor Ruby, então o resultado é basicamente o mesmo.

    
por 01.08.2012 / 02:40