Альтернативы Apache

15

Наш текущий стек - Apache + Tomcat + MySQL, использующий ProxyPassAJP для отправки запросов от Apache к Tomcat. Мы также запускаем PHP для Wordpress на тех же сайтах, поэтому нам нужны рабочие .htaccessфайлы. В ответ на досадную проблему (см. Эту страницу переполнения стека) мы рассматриваем альтернативные стеки. Обратите внимание, что нам, как правило, очень нравится apache, но эта проблема - ограничитель шоу: если мы не можем это исправить, мы не можем использовать Apache.

Альтернативы включают в себя:

  • Один кот
  • Glassfish (сервер приложений Java, разветвленный от Tomcat)
  • Jetty (Java-сервер)
  • смола
  • LightTPD (легкий HTTP-сервер)
  • Nginx (легкий HTTP-сервер)

На мой взгляд, решения делятся на два лагеря: чистый Java-лагерь, такой как Glassfish; или разделенный лагерь, такой как наш нынешний Apache + Tomcat. Нам нравится идея чисто Java-решения, так как меньшее количество движущихся частей должно означать меньшее количество ошибок; но любой из них поддерживает PHP, .htaccessфайлы и т. д.?

Теоретически мы могли бы сделать разделение другим способом - иметь простой интерфейс, который проксирует Apache только на тех битах, которые нуждаются в этих функциях - но на практике это составляет 80% запросов.

Какие варианты люди предлагают?

Маркус Даунинг
источник
Не могли бы вы более подробно проработать вашу «надоедливую проблему с выставочной заглушкой» или она совершенно неактуальна?
отметка
Перейдите по ссылке на страницу StackOverflow для получения более подробной информации. Это ошибка, когда клиенты получают неправильный ответ - иногда получают файлы JS или CSS вместо файлов HTML, или просто неверную страницу. Мы перепробовали почти все в Apache и Tomcat, о которых только можем подумать.
Маркус Даунинг

Ответы:

7

Я сильно подозреваю, что ваша проблема связана с AJP.

Несколько недель назад я был на курсе с одним из основных разработчиков Tomcat (он его запускал), его совет заключался в том, чтобы избегать AJP и mod-JK и т. Д., И придерживаться обычного HTTP-прокси-сервера.

Причины:

  1. На сегодняшний день это самый зрелый и стабильный разъем Tomcat.
  2. Ни одна реализация AJP не была последовательно разработана; оба проекта пострадали.
  3. В этой ситуации NBIO не приводит к увеличению производительности в реальном времени по сравнению с блокировкой ввода-вывода.

Мой совет, попробуйте использовать обычный мод-прокси HTTP с вашей текущей настройкой. Это наименьшее изменение для вас, и оно приведет вас к наиболее широко используемой и стабильной архитектуре развертывания Tomcat.

/ Ричи


источник
Я полагаю, я мог бы попробовать. Есть ли у вас какие-либо серьезные цифры на разницу в производительности?
Маркус Даунинг
Как я могу использовать обычный мод-прокси и при этом получать правильные имена хостов, поступающие в Tomcat? Я почти уверен, что в данный момент их все принимают как localhost.
Маркус Даунинг
2
ProxyPreserveHost On, вероятно, то, что вы ищете. httpd.apache.org/docs/2.2/mod/mod_proxy.html#proxypreservehost
Стивен Вейс
5

Мой текущий предпочтительный стек - использовать nginx вместо Apache. Везде, где это необходимо, php-fpm удовлетворяет потребность в PHP. Такая настройка отлично работает для развертывания приложений, таких как Rails, Magento и SugarCRM.

Джодер Хо
источник
4

Glassfish будет более масштабируемым, чем Tomcat, потому что он использует Grizzly (на основе NIO). У вас не так много вариантов, кроме варианта Tomcat, Jetty или Glassfish из-за требований Java. PHP может быть запущен с использованием Quercus , но может быть лучше просто развернуть его с помощью Nginx.

Джошуа
источник
2

На Java есть реализации PHP. Я знаю (но не использовал) именно эту . В блоге есть сообщение о том, как установить его на GlassFish (включая WordPress), но я думаю, что установка на tomcat такая же. Что касается .htaccess, вы не написали, что именно у вас там есть, но если это для перезаписи URL, то есть UrlRewriteFilter, который выполняет ту же работу с той же семантикой.

Дэвид Рабиновиц
источник
Файлы .htaccess в основном создаются WordPress, поэтому они содержат несколько простых RewriteRules
Маркус Даунинг,
Я полагаю, что PHP не будет их поддерживать, но не должно быть сложным иметь процесс, который читает их и передает определения в фильтр.
Дэвид Рабиновиц