Мне нужно разделить задачу завершения ssl среди фермы серверов или нескольких процессов. В этой архитектуре перед этой задачей завершения ssl должен быть балансировщик нагрузки. После поиска подходящего программного балансировщика нагрузки выяснилось, что для этой работы подходят только балансировщики нагрузки уровня 4 (TCP) (haproxy), а не уровня 7 (HTTP / HTTPS).
Мой вопрос: почему балансировщики нагрузки уровня 7, такие как nginx, perlbal, не могут просто пройти через завершение SSL? IP-адреса клиентов должны быть доступны в балансировщике нагрузки уровня 7. Они могут просто пересылать запросы, верно?
Архитектура такая:
HTTPS balancer (L4/TCP balancer)
/ | \ <--- HTTPS traffic
SSL server farm/processes
\ | / <--- HTTP traffic
HTTP balancer (L7/HTTP balancer)
/ | \
HTTP server farm/processes
Уровень TCP просто маршрутизирует трафик с добавленными заголовками / контролирует сетевые пакеты с нижележащего уровня. Он не знает, что он передает, поэтому ему не нужно иметь дело с его содержимым и с тем, является ли он HTTP (S). HTTP / HTTPS не имеет значения.
Имея дело с прикладным уровнем, вы глубоко погружаетесь в контент, поскольку имеете дело с приложением. В случае HTTPS вам потребуется завершение SSL. HTTP / HTTPS имеет значение.
Таким образом, если вы хотите сбалансировать нагрузку на уровне приложения, вам нужно будет выполнить завершение SSL на тех же балансировщиках нагрузки. nginx позволяет вам это делать.
Если вы хотите разделить эти задачи, вам понадобится балансировщик нагрузки на уровне сети / маршрутизации.