Я пытаюсь осмыслить балансировщик нагрузки приложений AWS. У меня немного сложная ситуация, когда я запускаю экземпляр ec2 с сервером nodejs, который мне в конечном итоге нужен только для https. Поэтому сначала я настраиваю прослушиватель на 443, у которого есть проверка работоспособности на порту 443, и перенаправляю в группу, у которой мой экземпляр ec2 является целью.
У меня есть кулинарная книга для шеф-повара, которая автоматизирует настройку ящика, настройку моего сервера nodejs и, наконец, получение / настройку сертификата SSL (с помощью acmetool). Для того, чтобы это работало, в коробке должны быть открыты порты 402, 4402 и 80.
Итак, чтобы заставить это работать, мне понадобились слушатели для 402, 4402 и 80, а затем --- что требовало создания отдельных групп с каждым из этих портов? (здесь я начал путаться) ... и затем у каждой из этих групп есть своя собственная проверка работоспособности --- так что тогда я понял, что я не могу пройти проверку на порт 443, если у меня изначально не будет сертификат SSL ... Это заставило меня создать еще один прослушиватель и группу на порту 12345, а затем заставить мой сервер nodejs отвечать на проверку работоспособности на 12345 ... Что казалось странным, потому что я в основном использую два сервера nodejs, один в 12345 ТОЛЬКО для проверки работоспособности, а другой на 443 для моего настоящего приложения.
Мне пришлось использовать 12345, потому что в acmetool есть демон «перенаправления», который прослушивает порт 80 и перенаправляет все запросы на 443, за исключением запросов, которые он получает для своих запросов SSL, которые он выполняет для выдачи / обновления сертификата.
Итак ... моя проблема в том, что мне кажется, что у меня есть все эти группы, которые теперь имеют одинаковую конечную точку проверки работоспособности на порту 12345 ... Что кажется очень неэффективным, поскольку я могу только предположить, что это означает, что балансировщик нагрузки работает для проверки связи с той же конечной точкой n раз, по одному для каждой группы. Это заставило меня подумать, что я, должно быть, все делаю неправильно.
Я согласен с вами, что вы делаете это неправильно. Я бы поступил следующим образом:
Таким образом, путь запроса вашего клиента:
Клиент -> [HTTPS] -> ALB -> [HTTP] -> Экземпляр
Этим достигается несколько вещей:
X-Forwarded-Proto
заголовок, который ALB отправляет вам в своем запросе (и поскольку у вас будет только прослушиватель HTTPS, значение этого заголовка всегда будет https
.Единственное предостережение в том, что ваш трафик, когда он покидает балансировщик нагрузки, предназначенный для ваших экземпляров, теперь не зашифрован. Обычно это нормально, если у вас нет оснований для соответствия требованиям, чтобы весь трафик оставался в зашифрованном состоянии на всех этапах.
В этом случае возможно (по-видимому, я никогда не делал этого сам) использовать самоподписанный сертификат в ваших экземплярах. В этом случае вы можете создать сертификат, который действует в течение длительного периода времени (может быть, 3 года), и использовать раздел SSL-сертификатов приложения Opsworks для загрузки его частей. Затем он станет доступен в пакете данных приложения на экземпляре, где вы можете извлечь части сертификата SSL и установить их в свое приложение до запуска службы. Затем настройте целевую группу для маршрутизации трафика на HTTPS / 443 на вашем экземпляре и соответствующим образом измените проверки работоспособности и группы безопасности.