Я видел множество настроек веб-сервера, в которых Apache находится перед другим веб-сервером. Наиболее яркими примерами из них являются веб-серверы Java, например Glassfish, Tomcat и т. Д. Какой в этом смысл? Я понимаю, что смысл размещения Apache перед, скажем, кластером Mongrel - это балансировка нагрузки, но как насчет других серверов? Каковы причины для этого?
Серверы веб-приложений хороши для размещения своих приложений (Ruby, Java и т. Д.), Но не так хороши, как Apache для размещения статических файлов или обеспечения балансировки нагрузки / аварийного переключения (mod_proxy), безопасность / фильтрация (mod_security), переписывая (mod_rewrite) и т.д. Поэтому довольно часто Apache используется в качестве внешнего интерфейса, возможно, обслуживая весь статический контент, а затем проксируя запросы на сервер приложений (mongrel, tomcat и т.д.).
Apache - это хорошо проверенный фрагмент кода, который «обходил стороной» несколько больше, чем новые серверы, поэтому имеет смысл использовать его в качестве сервера, обращенного к ненадежному Интернету. Это также означает, что вы можете разместить серверы приложений в своей сети, а серверы Apache - в DMZ.
Что касается вашего другого вопроса -
Тогда еще один вопрос: если бы я сделал это, скажем, с сервером Java за Apache, использовал бы я несколько экземпляров?
Зависит :) Какая нагрузка? На что похоже использование памяти? Как бы вы их распределяли - несколько серверов приложений Java на одном устройстве? Разные коробки? Подходящая конфигурация зависит от того, какую проблему вы пытаетесь решить.