Hospedar vários domínios em servidores separados, mas apenas um endereço IP público

3

Existe uma maneira de hospedar vários sites com diferentes domínios no mesmo endereço IP público, e quando o usuário digita, digamos example1.com que vai para um servidor na minha rede privada (192.168.1.20) e example2.com vai para 192.168.1.21? Eu tenho um host de VM e quero experimentar algumas das soluções turnkey linux, e seria ótimo se eu pudesse tornar esses sites publicamente acessíveis quando eu decidir usá-los. Muitas das soluções que encontrei aqui envolvem o uso de um redirecionamento, mas não encontrei uma descrição decente de como isso funciona. O usuário veria um redirecionamento acontecendo em seu navegador? É lento? Eu estou supondo que eu teria que ter um servidor "mestre" executando o Apache que iria ouvir na porta 80 e, em seguida, redirecionar para meus outros servidores?

    
por Kyle 13.05.2013 / 16:04

2 respostas

4

Toda vez que eu preciso fazer isso eu volto para o HAProxy, este é outro pacote de proxy reverso que permite hospedar serviços múltiplos atrás de um único (ou múltiplos) IPs públicos.

Neste exemplo, eu instalaria o HAproxy em sua máquina com um endereço público.

Isso pode ser feito com APT-GET ou YUM, dependendo do seu destino. Uma vez instalado, dê uma olhada no arquivo de configuração (no Ubuntu, em /etc/haproxy/haproxy.cfg)

O HAProxy usa FRONTENDS e BACKENDS, Frontends para ligar a um IP: PORT e, em seguida, um backend no qual você especifica servidores (um ou mais).

Aqui está um exemplo da minha configuração para executar vários aplicativos de serviço da web por trás do meu IP residencial único. No meu caso eu estou usando várias portas no mesmo IP em meus backends, em seus exemplos, você gostaria de usar IP diferentes na porta 80.

#GLOBAL CONFIG
global
        maxconn         1000
        daemon
        user            haproxy
        group           haproxy
        nbproc          1
        pidfile         /var/run/haproxy.pid
        stats socket    /var/run/haproxy.cmd mode 777 level admin

#ASSUMED DEFAULTS
defaults
        log             global
        mode            http
        option          httplog
        option          dontlognull
        retries         3
        maxconn         1000
        contimeout      5000
        clitimeout      50000
        srvtimeout      50000

#STATS PAGE
listen stats 192.168.10.253:9000
        mode http
        stats enable
        stats auth     username:password
        stats uri      /proxy_stats
        stats realm     PAGE TITLE

####SABNZBD####
backend sabnzbd
        server          sabnzbd 192.168.10.253:8080 weight 1 maxconn 1000 check inter 10000
        option          redispatch
        option          httpclose
        option          forwardfor
        balance         roundrobin

        timeout server  120000

####SICKBEARD####
backend sickbeard
        server          sickbeard 192.168.10.253:8081 weight 1 maxconn 1000 check inter 10000
        option          redispatch
        option          httpclose
        option          forwardfor
        balance         roundrobin
        timeout server  120000

####COUCHPOTATO####
backend router
        server          router 192.168.10.254:80 weight 1 maxconn 1000 check inter 10000
        option          redispatch
        option          httpclose
        option          forwardfor
        balance         roundrobin
        timeout server  120000

####TROLL####
backend troll
#        server          troll www.meatspin.com:80 weight 1 maxconn 1000 check inter 10000
         server          troll www.google.com:80 weight 1 maxconn 1000 check inter 10000
        option          redispatch
        option          httpclose
        option          forwardfor
        balance         roundrobin
        timeout server  120000


#NAS FrontEnd
frontend nas
        bind            PUBLIC_IP:80
        reqadd          X-Forwarded-Proto:\ http
        default_backend troll

        acl req_couchpotato hdr_beg(host) -i film.
        acl req_sickbeard hdr_beg(host) -i tv.
        acl req_router hdr_beg(host) -i home.
        acl req_sabnzbd hdr_beg(host) -i warez.

        use_backend couchpotato if req_couchpotato
        use_backend sickbeard if req_sickbeard
        use_backend sabnzbd if req_sabnzbd
        use_backend router if req_router

Com isso no lugar e o PUBLIC_IP configurado no Frontend, o myserver escuta na porta 80, olha para o cabeçalho HTTP em solicitações de entrada e se ele vê uma requisição para o filme.meu_dominio.com ele usou o backend do couchpotato, se ele vir tv.mypersonaldomain.com usa o backend do sickbeard.

Por favor, observe as configurações de 'troll' que eu usei enquanto testava isso, o backend padrão se você for ao meu IP público sem especificar um URL correspondente foi enviar sua solicitação para a meatspin.com (NÃO IR PARA NESTE ENDEREÇO SE VOCÊ VALOR OS SEUS OLHOS), substituímos isso por google.com para este exemplo.

Muitas outras coisas podem ser feitas com o HAProxy, mas isso deve lhe dar uma boa idéia do básico. A documentação do HAPRoxy é bastante detalhada, mas também muito abrangente.

link

J

    
por 13.05.2013 / 16:56
4

Você precisa de um proxy reverso entre os servidores e a rede pública. nginx é uma escolha popular para isso e há muitos exemplos lá fora, uma vez que você sabe o que procurar ( link é um dos primeiros que uma pesquisa por" nginx reverse proxy "retornou).

Para que os domínios / diretórios sejam servidos por diferentes servidores no interior do proxy, você define cada vhost ou diretório como faria se a máquina proxy estivesse prestes a atendê-los a partir de locais diferentes, mas definiria cada um como um proxy usando as opções relevantes.

O nginx não é a única opção: muitos servidores da web (incluindo o apache com o (s) módulo (s) certo (s)) podem operar dessa maneira. O nginx é uma escolha popular porque é rápido e leve, mas se você precisar de outros recursos também, compre ao redor para fazer a melhor escolha.

Se você usar SSL em qualquer um dos sites, precisará configurar o proxy com os certificados relevantes e, obviamente, será necessário configurar o servidor da Web para lidar com o SNI se precisar de mais de um site SSL para passar o procy. Para eficiência, é comum que o proxy converse com os servidores internos por http não-ssl se a rede entre eles for confiável.

    
por 13.05.2013 / 16:27