Зачем использовать веб-сервер Apache перед Glassfish или Tomcat?

хорошо ли использовать веб-сервер Apache перед GF или Tomcat? Улучшает ли это производительность / безопасность?

или нет никаких причин использовать веб-сервер Apache с GF?

5 ответов


взято из http://wiki.apache.org/tomcat/FAQ/Connectors#Q3

  • кластеризации. Используя Apache HTTP в качестве интерфейса, вы можете позволить Apache HTTP действовать как вход в ваш контент для нескольких экземпляров Apache Tomcat. Если один из ваших Apache Tomcats терпит неудачу, Apache HTTP игнорирует его, и ваш системный администратор может спать всю ночь. Этот момент можно проигнорировать, если вы используете аппаратный loadbalancer и кластеризацию Apache Tomcat способности.
  • Кластеризации/Безопасность. Вы также можете использовать Apache в качестве входной двери для разных Apache Tomcats для разных пространств имен URL (/app1/, /app2/, /app3/ или виртуальных хостов). Затем Apache Tomcats может находиться в защищенной области, и с точки зрения безопасности вам нужно беспокоиться только о HTTP-сервере Apache. По сути, Apache становится интеллектуальным прокси-сервером.
  • безопасность. Эта тема может повлиять в любом случае. Java имеет менеджер безопасности, а Apache имеет больше mindshare и больше трюков в отношении безопасности. Я не буду вдаваться в подробности, но пусть Google будет вашим другом. В зависимости от вашего сценария, один может быть лучше другого. Но также имейте в виду, если вы запускаете Apache с Tomcat - у вас есть две системы для защиты, а не одна.
  • надстройки. Добавление на CGI, perl, PHP очень естественно для Apache. Его медленнее и больше kludge для Tomcat. Apache HTTP также имеет сотни модулей, которые могут быть подключены по желанию. Apache Tomcat может есть такая возможность, но код еще не написан.
  • оформителей! С Apache HTTP перед Apache Tomcat вы можете выполнять любое количество декораторов, которые Apache Tomcat не поддерживает или не имеет непосредственной поддержки кода. Например, mod_headers, mod_rewrite и mod_alias могут быть написаны для Apache Tomcat, но зачем изобретать колесо, когда Apache HTTP сделал это так хорошо?

Так как все дали вам причины, почему поставить Apache перед Tomcat позвольте мне дать вам некоторые причины, почему не в:

  • разъем AJP не поддерживает и не будет поддерживать расширенный IO смысла нет Комета, Websockets, etc.
  • если вы не используете AJP, я заметил, что при использовании mod_proxy для Apache есть довольно большие накладные расходы прокси. Поэтому, если вы ищете низкую задержку, Apache спереди не будет хороший.
  • Apache имеет довольно большой отпечаток ноги по сравнению с Nginx или Lighttpd и т. д.

размещение Apache впереди делает не:

Что Apache дает вам больше плагинов и позволяет запускать различные веб-технологии.

Если вам нужен только Tomcat, вам лучше использовать HAProxy или Nginx в качестве балансировщика нагрузки.


  • масштабируемость - как отметили Амир и user384706, вы можете загрузить несколько экземпляров вашего приложения за Apache. Это позволит вам обрабатывать больший объем и повысить стабильность в случае, если один из ваших экземпляров снизится.

  • безопасность - Apache, Tomcat и Glassfish поддерживают SSL, но если вы решите использовать Apache, скорее всего, именно там вы должны его настроить. Если вы хотите дополнительные защита от атак (DoS, XSS, SQL injection и др.)) вы можете установить mod_security брандмауэр веб-приложений.

  • Дополнительные Возможности - Apache имеет кучу хороших модулей, доступных для перезаписи URL, взаимодействия с другими языками программирования, аутентификации и тонны других вещей.

  • производительность - если у вас много статического контента, его обслуживание с помощью Apache будет улучшите свою производительность. Если большая часть вашего контента динамична, использование Tomcat или Glassfish будет таким же быстрым (возможно, быстрее). (как указано в ответах на этот вопрос, это не так.)


одна из причин разместить Apache перед Tomcat будет для балансировки нагрузки.
Запросы попадают на сервер Apache спереди и распространяются на backend Tomcat тара в зависимости от нагрузки и доступности.
Клиенты знают только один IP (Apache), но запросы распределены по нескольким контейнерам.
Так что это в том случае, если вы развертываете своего рода распределенное веб-приложение, и вам это нужно.
Если ваш вопрос о простой сети затем приложение см. dbyrne answer


Если вы используете стек лампы, вы можете запустить PHP/Ruby материал с apache и переслать Java материал tomcat с mod_jk.