Зачем использовать веб-сервер Apache перед Glassfish или Tomcat? - PullRequest
53 голосов
/ 25 февраля 2011

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

Или нет никаких причин использовать Apache Web Server с GF?

Ответы [ 5 ]

66 голосов
/ 25 февраля 2011

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

  • кластеризация. Используя Apache HTTP в качестве внешнего интерфейса, вы можете позволить Apache HTTP действовать в качестве входной двери для вашего контента для нескольких экземпляров Apache Tomcat. Если один из ваших Apache Tomcats выходит из строя, Apache HTTP игнорирует его, и ваш системный администратор может спать всю ночь. Этот момент можно игнорировать, если вы используете аппаратный балансировщик нагрузки и возможности кластеризации Apache Tomcat.
  • Кластеры / Безопасность. Вы также можете использовать Apache в качестве входной двери для разных Apache Tomcats для разных пространств имен URL (/ app1 /, / app2 /, / app3 / или виртуальных хостов). Таким образом, каждый Apache Tomcats может находиться в защищенной области, и с точки зрения безопасности вам нужно беспокоиться только о HTTP-сервере Apache. По сути, Apache становится интеллектуальным прокси-сервером.
  • Security. Эта тема может повлиять в любом случае. У Java есть менеджер безопасности, в то время как у Apache больше ума и больше хитростей в отношении безопасности. Я не буду вдаваться в подробности, но позвольте Google быть вашим другом. В зависимости от вашего сценария один может быть лучше другого. Но имейте в виду, что если вы запускаете Apache с Tomcat - вам нужно защищать две системы, а не одну.
  • надстройки. Добавление на CGI, Perl, PHP очень естественно для Apache. Это медленнее и больше для Tomcat. Apache HTTP также имеет сотни модулей, которые могут быть подключены по желанию. Apache Tomcat может иметь эту возможность, но код еще не написан.
  • декораторы! Используя Apache HTTP перед Apache Tomcat, вы можете выполнять любое количество декораторов, которые Apache Tomcat не поддерживает или не имеет немедленной поддержки кода. Например, mod_headers, mod_rewrite и mod_alias могут быть написаны для Apache Tomcat, но зачем изобретать велосипед, если Apache HTTP сделал это так хорошо?
  • Скорость. Apache HTTP быстрее обслуживает статический контент, чем Apache Tomcat. Но если у вас нет сайта с высоким трафиком, этот пункт бесполезен. Но в некоторых случаях Apache Tomcat может работать быстрее, чем Apache httpd. Итак, отметьте ВАШ сайт. Apache Tomcat может работать со скоростью httpd при использовании соответствующего соединителя (APR с включенным sendFile). Скорость не должна учитываться при выборе между Apache httpd и Tomcat
  • Работа с сокетом / стабильность системы. Apache HTTP имеет лучшую обработку сокетов в отношении условий ошибок, чем Apache Tomcat. Основная причина в том, что Apache Tomcat должен выполнять всю обработку своих сокетов через JVM, которая должна быть кроссплатформенной. Проблема в том, что оптимизация сокетов - это испытание для конкретной платформы. В большинстве случаев Java-код в порядке, но когда вы также засыпаны сброшенными соединениями, недопустимыми пакетами, недопустимыми запросами с недопустимых IP-адресов, Apache HTTP справляется с удалением этих состояний ошибки лучше, чем программа на основе JVM. (YMMV) * ​​1017 *
45 голосов
/ 11 сентября 2011

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

  • Разъем AJP не поддерживает и не будет поддерживать расширенный ввод-вывод , что означает отсутствие Комета , Веб-сокеты и т. Д.
  • Если вы не используете AJP, я заметил, что при использовании mod_proxy для Apache возникают довольно большие издержки прокси-сервера. Так что если вы ищете Apache с низкой задержкой впереди, это не будет хорошо.
  • У Apache довольно большой отпечаток по сравнению с Nginx, Lighttpd и т. Д.

Помещение Apache впереди НЕ :

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

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

8 голосов
/ 25 февраля 2011
  • Масштабируемость - Как отметили Амир и пользователь 384706, вы можете балансировать нагрузку на несколько экземпляров вашего приложения за Apache. Это позволит вам обрабатывать больший объем и повысить стабильность в случае отказа одного из ваших экземпляров.

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

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

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

1 голос
/ 25 февраля 2011

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

0 голосов
/ 25 февраля 2011

Если вы работаете со стеком LAMP, вы можете запускать PHP / Ruby с Apache и пересылать Java на Tomcat с помощью mod_jk.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...