Задача в следующем. Есть несколько веб проектов, расположенных на разных серверах. Сервера связанны внутренней сетью. На внешку выдан только 1 ip адрес (и, к сожалению, пока нет возможности получить дополнительно еще), следовательно только один сервер может смотреть наружу.
Идея такая, что один сервер будет выступать как frontend, общаясь по сети с остальными серверами в зависимости от домена. Подскажите, пожалуйста, с помощью чего лучше организовать подобную схему? Что должно быть на fronend и на backend серверах?
Уточню, на бекенд серверах проекты разного типа, есть на ruby, есть на java, есть на php.
Еще одно уточнение. На одном из backend php проект, который отдает контент через x-accel-redirect не из папки www. Поэтому использовать монтирование для отдачи статики не получиться. В идеале нужен некий быстрый прокси, который бы направлял на нужный сервер в зависимости от домена или типа подключения (ssl, no-ssl) и при этом как можно меньше бы влиял на производительность.
У nginx свой механизм отдачи статики. В случае если статика лежит на frontend серверах ее придется отдавать тем же самым apache (например) для nginx и данный механиз не будет работать. Настроить кеширование - это интересно, но если в проекте много статики (фотогалерея), то кеширование на фронтенде не совсем удачное решение.
Думал по поводу использования nginx на backend серверах, а на fronend поставить что-нибудь, что следило бы только за типом подключения (ssl, no-ssl) и доменам, и в зависимости от этих условий проксировать данные с конечных серверов. Хотелось бы услышать о целесообразности использования такой схемы. Например на frontend использовать что то вроде HAProxy или Varnish.
Arik: К сожалению, это нужно делать для каждого проекта. Плюс есть проект, который отдают контент по x-accel-redirect. Проверяется безопасность с помощью скриптов и дальше отдается файл за пределами www папки. А это усложняет задачу. На одном из серверов backend nginx просто необходим (либо так же монитровать). Размер файла может быть от 1 мегобайта до 100.
AgentSIB: для таких целей вполне можно использовать haproxy в режиме tcp. Следует обратить внимание, что работа нескольких доменов по HTTPS с одного IP возможна только по протоколу TLS.
А вообще, конечно, следует понимать, что и nginx и haproxy могут решить подобный круг задач и оба довольно эффективны. Пои этом каждый из них имеет свои преимущества и недостатки. К примеру haproxy не может кешировать ответы сервера на диске, а nginx не умеет ssl pass through, а http-проверки здоровья бэкэндов доступны только в платной версии.
Я бы посоветовал точно определиться с требуемой функциональностью фронтэнда и на основе этого уже определиться. Не исключаю, что могут потребоваться оба.