É possível executar Hosts Virtuais (ou equivalente) em vários servidores, mas um IP público, usando o Tomato?

3

Aqui está minha configuração inicial. Eu tenho um único endereço IP fornecido pelo meu provedor. Eu tenho um domínio de nível superior (TLD) e vários subdomínios que apontam para esse IP. Internet vem através do meu modem a cabo e se conecta ao meu roteador AdvancedTomato. Desejo instalar vários servidores da Web em máquinas separadas e fazer com que o roteador encaminhe o tráfego com base no nome do domínio. Aqui está uma foto básica

    Internet
    |
    |
    └── example.com-x.x.x.x(router)
        ├── machine1-192.168.1.101
        │   ├── project11.example.com
        │   └── project12.example.com
        ├── machine2-192.168.1.102
        │   ├── project21.example.com
        │   └── project22.example.com
        └── machine3-192.168.1.103
            ├── project31.example.com
            └── project32.example.com

Já consegui fazer isso em uma única máquina usando o encaminhamento de porta básico no roteador (tudo na porta 80 vai para a máquina1) e, em seguida, usando o VirtualHost do Apache nessa máquina para abrir sites diferentes.

    Internet
    |
    |
    └── example.com-x.x.x.x(router)
        ├── machine1-192.168.1.101
            ├── project11.example.com
            └── project12.example.com

Minha pergunta: é possível fazer isso no nível do roteador? Se não, como os grandes sites configuram isso? Eu sei que o HTTP está no nível do aplicativo, e é aí que está a solicitação do domínio, e o roteador pode até ver essas informações? Eu precisaria de um servidor proxy?

Além disso, isso deve estar na falha do servidor?

    
por TinyTheBrontosaurus 26.03.2016 / 20:03

2 respostas

2

O que você está descrevendo é Proxy reverso Como grandes sites configuram isso? - Eles têm servidores proxy por trás dos roteadores

Sim, é possível no nível do roteador, mas não pense que qualquer roteador pode fazer isso

O AdvancedTomato pode fazer isso diretamente da interface do usuário. Digite o seguinte na seção Web Services- > Web Server- > HTTP. Em seguida, salve e pressione o botão play. Tomato adiciona alguns bits extras, então para verificar se é a configuração que você quer, você pode vê-lo em /etc/nginx.conf (ou veja em /var/log/nginx/error.og se ele falhou)

    # Because end of http://nginx.org/en/docs/http/server_names.html
    server_names_hash_bucket_size  64; 


    # Adapted from NixCraft
    # http://www.cyberciti.biz/tips/using-nginx-as-reverse-proxy.html

    # Host required
    server {
        listen      80 default_server;
        server_name "";
        return      444;
    }        

    ## Start primary proxy ##
    server {
        listen       80;
        server_name  jira.example.com
                     confluence.example.com
                     stash.example.com
                     cacti.example.com;
        access_log  /var/log/nginx/log/lamp.example.access.log  main;
        error_log  /var/log/nginx/log/lamp.example.error.log;

        ## send request back to apache1 ##
        location / {
             proxy_pass  http://192.168.1.99/;
             proxy_redirect default;
             proxy_buffering off;
             proxy_set_header        Host            $host;
             proxy_set_header        X-Real-IP       $remote_addr;
             proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }
    ## End ##



    map $http_upgrade $connection_upgrade {
        default upgrade;
        '' close;
    }

    # Websockets
    server {
        listen 8686;
        server_name other.example.com;
        location / {
            proxy_pass http://192.168.1.99:8686;
            proxy_redirect default;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection $connection_upgrade;
        }
    } 

Alternativamente, você pode colocar um proxy reverso atrás do roteador para redirecionar o tráfego

Eu pessoalmente uso o DD-WRT - eu li sobre isso, mas ainda não implementei Proxy Reverso no nível do roteador Proxy reverso DD-WRT

    
por 27.03.2016 / 04:32
1

Eu sei que esta é uma pergunta antiga e a resposta acima está correta. No entanto, há uma razão pela qual isso não é feito no nível do roteador.

Para que um dispositivo de nível de pacote faça isso (roteador), ele precisa ser capaz de ver qual site está sendo solicitado. No HTTP, isso vem em um cabeçalho de solicitação (Host) em uma mensagem http, e em HTTPS isso é comumente fornecido no handshake TLS (pacote de saudação do cliente) usando uma extensão chamada Server Name Indication (SNI).

Ambos são enviados apenas após a conexão TCP ser configurada (TCP 3 handshake), e para um roteador fazer isso, ele precisa se tornar o terminal TCP em si, aceitar o conexão em nome do servidor por trás dele (esperamos que o servidor esteja em execução), espere até que o cliente envie a solicitação http ou o pacote de saudação do cliente TLS e, em seguida, configure uma conexão com o servidor de backend correto. Isso basicamente faz com que o roteador seja um proxy reverso. O software proxy geralmente faz um trabalho melhor e oferece mais opções.

    
por 23.07.2016 / 01:30