Я в первую очередь разработчик Java, и я пришел к вам с вопросом, который разделяет разрыв между разработчиками и системными администраторами.
Много лет назад, когда запуск Tomcat в качестве сервера приложений был новинкой, было принято использовать Apache. Насколько я понимаю, это было сделано потому, что:
Java больше не считается медленным, и я сомневаюсь, что добавление Apache к этому миксу действительно поможет ускорить процесс.
Что касается проблемы с портами, в наши дни, вероятно, есть более простые способы подключения серверов приложений к портам 80/443.
Итак, мой вопрос: действительно ли есть какая-то польза от работы с веб-приложениями Java с помощью Apache в наши дни? Если да, то стоит ли использовать Apache? Стоит ли смотреть на Nginx? Вместо Tomcat я использую Glassfish, если это важно.
Большинство людей скажут, что вам нужно что-то впереди из-за статических файлов.
Это несколько глупо, потому что:
Настоящая причина, по которой вам нужно что-то перед tomcat / jetty / jboss для балансировки нагрузки и обработки аварийного переключения.
Я рекомендую вам не слушать "... Двигатель Tomcat - это ахиллесова пята всей экосферы ..."как мы все знаем, это неправда ... ваша база данных и ее пул соединений будут такими.
Это зависит от экосистемы вашего приложения. В среде интрасети - вам, вероятно, ничего не нужно перед Tomcat.
Если только в Интернете в качестве общедоступной службы, это зависит от обстоятельств. Apache хорош тем, что предоставляет такие модули, как mod_security. Но если вы не знакомы с конфигурацией apache (или ngix) - тогда вы можете подвергнуть себя БОЛЬШЕМУ атакам или точкам отказа из-за неправильной конфигурации.
Apache впереди удобен для обслуживания страниц сбоя в тех случаях, когда вам нужно обновить веб-приложение и дождаться перезапуска. Но если перезапуски случаются редко или они рассчитаны правильно, то это еще одна причина перейти на Tomcat автономно.
Об этом также говорится в FAQ Tomcat, в котором рассматриваются некоторые дополнительные моменты: http://wiki.apache.org/tomcat/FAQ/Connectors#Q3
Удивительные, некоторые из этих ответов - действительно ли кто-нибудь из вас запускает высокопроизводительные многоуровневые и многосерверные веб-сайты, поддерживаемые Tomcat? ОП, ваше первоначальное предположение, что Tomcat не "медленный" ... вау. Двигатель Tomcat - это ахиллесова пята всей экосферы.
Да, вы хотите, чтобы Apache был впереди - он предоставляет в первую очередь mod_rewrite (вы уже реализовали UrlRewriteFilter в своем Tomcat?), А также файлы htaccess, которые делают защиту веб-сервера столь важной. Apache может позволить вам балансировать нагрузку на узлы Tomcat за ним, гораздо быстрее обслуживать статический контент и получать лучше производительность из Tomcat, потому что вы не перегружаете его канал запроса вещами, отличными от Java (js / css / html / jpg / etc.). Вы можете легко разгрузить свой SSL в Apache (если не разгрузить аппаратный LB), и вам даже не придется иметь дело с той пародией, которая называется Java Keystore. Так много побед - вы можете настроить mod_jk на свои внутренние узлы, чтобы не перегружать бедный маленький мозг Java, потому что он обычно не может обрабатывать большой трафик с классами среднего Java-кодера.
Остерегайтесь тех, кто говорит вам, что Apache (или nginx и т. Д., Но производительность Apache в любом случае будет затмевать Tomcat, так что это не имеет значения) - не лучшая идея перед Tomcat.
Apache не является хорошим кандидатом для обслуживания статического контента из-за его многопроцессорной природы. Nginx подходит лучше, поскольку он использует асинхронный ввод-вывод для обработки запросов. Современные Tomcats также могут использовать асинхронный ввод-вывод (NIO в терминологии Java). Например, вам следует установить tomcat-native
пакет в Fedora, чтобы Tomcat использовал асинхронный ввод-вывод.
Если при использовании Tomcat нужно просто привязать порт привилегий без использования root, вам не нужно устанавливать его с помощью Apache httpd. Tomcat по умолчанию поставляется с jsvc
что вам нужно скомпилировать.
jsvc
- это оболочка службы Java для запуска Tomcat как службы. Эта служба запускается как root, но запускает Tomcat как обычный пользователь. Таким образом, вы можете привязать свой Tomcat к привилегированным портам.
Я не знаю насчет Glassfish, но убедитесь, что решения существуют, а если нет, вы наверняка можете использовать методы переадресации портов (iptables и т. Д.)
Я думаю, что выбор взаимодействия сервера приложений с веб-сервером (например, Apache httpd) предназначен для балансировки нагрузки, кластеризации или обслуживания статических ресурсов только с помощью веб-сервера и динамических ресурсов с помощью сервера приложений.