ELB, nginx e vários aplicativos HTTPS

2

Digamos que eu tenha 3 aplicativos diferentes que fazem HTTPS. Nem todos são de alto tráfego, por isso executo todos os 3 no mesmo "pool" de 3 instâncias do EC2.

domain1.com/domain2.com/domain3.com, todos têm seus registros A apontando para o Amazon ELB, que encaminha: 443 e: 80 para nginx: 80 em todos os três servidores (assim, sim, o ELB encerra o SSL). Como o ELB está encerrando o SSL, tenho três ELBs diferentes, em vez de apenas um . Então basicamente:

              domain1.com  domain2.com  domain3.com
                  |             |            |
                  |             |            |
                  V             V            V
                 ELB1          ELB2        ELB3
                  \             |             /
                   \            |            /
                    \           |           /
                     \          |          /
                      \         |         /
                       \        |        /
                        \_______|_______/
                                |
                                |
                                V
                   ---------------------------
                   nginx      nginx      nginx
                     |          |          |
                     V          V          V
                  php-fpm    php-fpm    php-fpm

Cada uma das três instâncias executa nginx e php-fpm. Dessa forma, quando a carga está muito alta, acabamos de inicializar outra instância a partir da mesma imagem da máquina e ela apenas se junta ao pool. As próprias instâncias são configuradas para que o nginx se conecte apenas ao php-fpm em execução no host local.

Não sei se esta é a maneira correta de resolver este cenário.

  • Devo transferir a terminação SSL para nginx para que eu não precise de n número de ELBs como certificados HTTPS? Como isso afetaria a utilização da CPU?
  • Devo estar usando uma única máquina nginx que se conecta a vários back-ends php-fpm? Então eu preciso me preocupar com o escalonamento de dois papéis diferentes, em vez de apenas um.
  • Como isso muda se eu quiser iniciar instâncias em outras regiões, por exemplo?

Espero que esta pergunta não seja inapropriada para o SF.

    
por Vic 22.09.2013 / 19:16

3 respostas

1

Você pode executar algo assim:

          domain1.com  domain2.com  domain3.com
              \             |             /
               \            |            /
                \           |           /
                 \          |          /
                  \         |         /
                   \        |        /
                    \_______|_______/
                            |
ngix (static pages from local storage, 3 IP addresses, SSL termination)
                            |
                            |
                       ELB (optional)
                            |
                            |
                 -----------------------
                 |          |          |
                 V          V          V
                php        php        php
  • Seria um pouco mais barato, já que 1 EC2 reservada para pequenas instâncias + 1 ELB é mais barata que 3 ELB.

  • Você poderia ser ainda mais barato se pudesse abandonar o ELB e usar apenas o round robin normal do DNS (mas perderá alguns recursos do ELB como o failover automático).

  • A latência na veiculação de páginas estáticas não seria afetada pela carga nas instâncias de veiculação do php.

  • A veiculação do PHP não competiria pela RAM com o cache do SO das páginas estáticas.

  • Você pode até usar o mod_php do apache em vez do php-fpm, pois não é necessário separar o usuário dos processos - deve ser um pouco mais rápido.

  • Seria mais barato adicionar mais páginas para servir (adicionar mais um IP em vez de mais um ELB).

Mas também tem algumas desvantagens:

  • Você teria mais um único ponto de falha (ngix server).

  • Configuração mais complicada.

por 22.09.2013 / 23:42
1

Should I move SSL termination down to nginx so that I don't need n number of ELBs as HTTPS certificates? How would that affect the cpu utilization?

você pode usar 1 ELB (ou 2, em um cenário de espera ativa) se puder se certificar de que TODOS os visitantes estão usando navegadores compatíveis com SNI (consulte este documento sobre problemas com o SNI, por exemplo, com o Windows XP, Android 2.x etc.). precisa de um IP público para cada certificado SSL.

Eu não sei se é possível encomendar e usar mais de 1 IP por instância do EC2; em caso afirmativo, você poderia simplesmente rotear esses IPs para o seu único descarregador / balanceador de carga, evitando o problema do SNI.

Should I be using a single nginx machine that connects to multiple php-fpm backends? Then I need to worry about scaling two different roles instead of just one.

você poderia, mas isso realmente depende do que você está usando nginx para; se for apenas dump proxy_pass, a centralização pode ser ok e você pode simplificar muito a sua configuração reduzindo algumas camadas. mas isso só pode ser respondido quando estiver olhando para a sua configuração ao vivo.

    
por 23.09.2013 / 09:15
1

Should I move SSL termination down to nginx so that I don't need n number of ELBs as HTTPS certificates? How would that affect the cpu utilization?

Os ELBs são uma despesa adicional (algo como $ 20 por mês, mais dados), portanto você deve levar isso em consideração. Quais recursos você está usando? Se você estiver apenas após o encerramento do SSL, provavelmente poderá descarregar isso em seus servidores da Web / de aplicativos.

Se você estiver aproveitando os recursos de balanceamento de carga e dimensionamento (juntamente com a manutenção zero), poderá considerá-lo um investimento que vale a pena.

1 ELB por domínio pode ser caro para 100 sites, mas para apenas 3 sites é bom não ter que se preocupar com a sobrecarga de manutenção.

Should I be using a single nginx machine that connects to multiple php-fpm backends? Then I need to worry about scaling two different roles instead of just one.

Você está propondo isso em vez dos ELBs ou além deles? Separação de servidores da web e servidores de aplicativos para obter benefícios, pois pode ser útil escalar independentemente. Isso, é claro, adiciona outra sobrecarga de manutenção que pode não valer a pena em 3 sites (que geralmente não estão sob carga pesada). Eu não sugeriria apressar esse caminho até que você saiba que vai precisar dele.

How does this change if I want to start up instances in other regions, for example?

Veja um exemplo de EC2s em várias regiões, usando o ELB & Route53 em um cenário de failover.

link

Using Route 53 DNS failover, you can run applications in multiple AWS regions and designate alternate load balancers for failover across regions. In the event that your application is unresponsive, Route 53 will remove the unavailable load balancer endpoint from service and direct traffic to an alternate load balancer in another region.

    
por 23.09.2013 / 12:47