Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

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

  • кластеризация. Используя Apache HTTP в качестве интерфейса, вы можете позволить Apache HTTP действовать как входная дверь вашего контента в несколько экземпляров Apache Tomcat. Если один из ваших Apache Tomcats терпит неудачу, Apache HTTP игнорирует его, и ваш Sysadmin может спать всю ночь. Эта точка может быть проигнорирована, если вы используете аппаратный loadbalancer и возможности кластеризации Apache Tomcat.
  • Кластеры/Безопасность. Вы также можете использовать Apache в качестве входной двери для разных Apache Tomcats для разных пространств имен URL (/app1/,/app2/,/app3/или виртуальных хостов). Затем Tomcats Apache могут находиться в защищенной области и с точки зрения безопасности, вам нужно только беспокоиться о HTTP-сервере Apache. По сути, Apache становится интеллектуальным прокси-сервером.
  • Безопасность. Эта тема может повлиять на все в любом случае. У 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)

Ответ 2

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

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

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

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

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

Ответ 3

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

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

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

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

Ответ 4

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

Ответ 5

Если вы используете стек LAMP, вы можете запускать материал PHP/Ruby с apache и пересылать java файл в tomcat с помощью mod_jk.