Назад | Перейти на главную страницу

ELB, nginx и несколько приложений HTTPS

Скажем, у меня есть 3 разных приложения, все из которых работают по протоколу HTTPS. Не все из них имеют высокий трафик, поэтому я запускаю все 3 в одном «пуле» из 3 экземпляров EC2.

domain1.com/domain2.com/domain3.com имеют свои записи A, указывающие на Amazon ELB, который перенаправляет: 443 и: 80 на nginx: 80 на всех трех серверах (так что да, ELB завершает SSL). Поскольку ELB выполняет завершение SSL, у меня есть три разных ELB вместо одного. Итак, в основном:

              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

Каждый из трех экземпляров запускает как nginx, так и php-fpm. Таким образом, когда нагрузка слишком высока, мы просто загружаем другой экземпляр из того же образа машины, и он просто присоединяется к пулу. Сами экземпляры настроены таким образом, что nginx подключается только к php-fpm, запущенному на localhost.

Я не знаю, правильный ли это способ решения этого сценария.

Надеюсь, этот вопрос не неуместен для SF.

Должен ли я перенести завершение SSL на nginx, чтобы мне не понадобилось n ELB в качестве сертификатов HTTPS? Как это повлияет на загрузку процессора?

ELB - это дополнительные расходы (около 20 долларов в месяц плюс данные), поэтому вам следует принять это во внимание. Какие функции вы используете? Если вы сразу после завершения SSL, вы, вероятно, могли бы просто выгрузить его на свои веб-серверы / серверы приложений.

Если вы получаете выгоду от функций балансировки нагрузки и масштабирования (наряду с нулевым обслуживанием), вы можете считать это выгодным вложением.

1 ELB на домен может быть дорогостоящим для 100 сайтов, но только для 3 сайтов, вероятно, неплохо не беспокоиться о накладных расходах на обслуживание.

Должен ли я использовать одну машину nginx, которая подключается к нескольким бэкэндам php-fpm? Затем мне нужно беспокоиться о масштабировании двух разных ролей вместо одной.

Вы предлагаете это вместо ELB или в дополнение к ним? Разделение веб-серверов и серверов приложений для получения преимуществ, поскольку может быть удобно масштабировать независимо. Это, конечно, добавляет дополнительные накладные расходы на обслуживание, которые могут не стоить того для 3 сайтов (которые не часто находятся под большой нагрузкой). Я бы не советовал идти по этому пути, пока вы не узнаете, что он вам понадобится.

Как это изменится, если я захочу запустить экземпляры, например, в других регионах?

Вот один пример EC2 в нескольких регионах, использующих ELB и Route53 в сценарии аварийного переключения.

http://aws.amazon.com/elasticloadbalancing/

Используя аварийное переключение DNS Route 53, вы можете запускать приложения в нескольких регионах AWS и назначать альтернативные балансировщики нагрузки для аварийного переключения между регионами. В случае, если ваше приложение не отвечает, Route 53 удалит недоступную конечную точку балансировщика нагрузки из службы и направит трафик на альтернативный балансировщик нагрузки в другом регионе.

Должен ли я перенести завершение SSL на nginx, чтобы мне не понадобилось n ELB в качестве сертификатов HTTPS? Как это повлияет на загрузку процессора?

вы могли бы использовать 1 ELB (или 2 в сценарии активного ожидания), если бы вы могли убедиться, что ВСЕ ваши посетители используют браузеры с поддержкой SNI (см. этот документ о проблемах с SNI, например, с Windows XP, Android 2.x и т. д.), в противном случае вам понадобится 1 общедоступный IP для каждого ssl-сертификата.

я не знаю, можно ли заказать и использовать более 1 IP на экземпляр EC2; Если это так, вы можете просто перенаправить эти IP-адреса на свой единственный ssl-offloader / loadbalancer, избегая проблем с SNI.

Должен ли я использовать одну машину nginx, которая подключается к нескольким бэкэндам php-fpm? Затем мне нужно беспокоиться о масштабировании двух разных ролей вместо одной.

вы могли бы, но это действительно зависит от того, для чего вы используете nginx; если это просто дамп proxy_pass, централизация может быть в порядке, и вы можете значительно упростить настройку, уменьшив некоторые уровни. но на это можно ответить, только взглянув на свою живую установку.

Вы можете запустить что-то вроде этого:

          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
  • Это будет немного дешевле, так как 1 зарезервированный небольшой экземпляр EC2 + 1 ELB дешевле, чем 3 ELB.

  • Вы могли бы быть еще дешевле, если бы вы могли отказаться от ELB и просто использовать обычный циклический перебор DNS (но вы потеряете некоторые функции ELB, такие как автоматическое переключение при отказе).

  • На задержку обслуживания статических страниц не повлияет нагрузка на экземпляры, обслуживающие php.

  • Обслуживание PHP не будет конкурировать за оперативную память со статическим кешем ОС страниц.

  • Вы даже можете использовать apache mod_php вместо php-fpm, если вам не нужно разделение пользователей между процессами - это должно быть несколько быстрее.

  • Было бы дешевле добавить больше страниц для обслуживания (добавить еще один IP вместо еще одного ELB).

Но есть и недостатки:

  • У вас была бы еще одна единственная точка отказа (сервер ngix).

  • Более сложная настройка.