У меня мало опыта в проектировании архитектурной инфраструктуры веб-сайтов. Я знаю, что это может быть конкретной ситуацией. Веб-сайт должен:
1) Требуется поддержка HTTPS для некоторых страниц (например, страницы входа), в то время как другие являются просто страницей HTTP.
2) Требуется несколько веб-серверов, поэтому требуется некоторая балансировка нагрузки.
3) Требуется HTTP-кеширование и сжатие для повышения производительности.
4) Некоторые запросы (например, загрузка изображений) следует направлять на выделенные внутренние серверы. Итак, требуется балансировка на основе URL.
Я знаю, что NginX и HAProxy - это хороший обратный прокси-сервер с открытым исходным кодом и / или балансировщик нагрузки. Поскольку HAProxy не поддерживает SSL, балансировка нагрузки Nginx не так хороша, как HAProxy. Я возьму оба.
Итак, следует ли мне поставить Nginx (как обратный прокси) перед HAProxy (как балансировщик нагрузки) или наоборот?
Спасибо
Если вы планируете иметь каждый веб-сервер, доступный через HTTPS, то вам необходимо установить Nginx перед HAProxy. С этой конфигурацией ваш Nginx будет обрабатывать всю работу SSL и отправлять расшифрованный HTTP-трафик непосредственно на интерфейс HAProxy, который затем будет выполнять запросы балансировки нагрузки на ваши веб-серверы на основе указанных вами правил.
Идея использования LVS, о которой говорил грызть в том, что он несколько менее навязчив, поскольку не поддерживает соединение между вашим веб-сервером и клиентом, обращающимся к сайту. С другой стороны, LVS предоставит вам только простую балансировку нагрузки и не позволит вам пересылать запросы на основе расширения файла, запрошенного URL, заголовков и т. Д. Вот почему HAProxy используется во многих ситуациях.
Если вам нужен SSL только на одном сервере (без балансировки нагрузки), вы можете безопасно использовать HAProxy для всего без использования Nginx. С другой стороны, у вас будет одна проблема, связанная с невозможностью увидеть исходный IP-адрес клиента в журналах HTTPS веб-сервера (поскольку HAProxy перезаписывает этот адрес). IP будет в журналах HAProxy, если вы его включите;)
haproxy начиная с версии 1.5, выпущенной в 2014 г., действительно поддерживает SSL как шарм, включая SNI.
Поэтому я бы поставил haproxy перед nginx.
Вам следует просто использовать nginx, он делает все, что вам нужно, как интерфейсный веб-сервер. Если вам нужна внешняя балансировка нагрузки, используйте балансировщик нагрузки L3, например Виртуальный сервер Linux, потому что он не мешает, как HAproxy. При необходимости используйте HAproxy для скрытой балансировки нагрузки, например для балансировки запросов к пулу внутренних рабочих процессов.