Alternatywy dla Apache

15

Nasz obecny stos to Apache + Tomcat + MySQL, używający ProxyPassAJP do uruchamiania żądań z Apache do Tomcat. Na tych samych stronach uruchamiamy również PHP dla Wordpress, dlatego potrzebujemy .htaccessplików roboczych . W odpowiedzi na irytujący problem (patrz strona Przepełnienie stosu) rozważamy alternatywne stosy. Zauważ, że generalnie lubimy apache, ale ten problem jest przeszkodą: jeśli nie możemy go naprawić, nie możemy używać Apache.

Alternatywy obejmują:

  • Sam Tomcat
  • Glassfish (serwer aplikacji Java, rozwidlony z Tomcat)
  • Jetty (serwer Java)
  • Żywica
  • LightTPD (lekki serwer HTTP)
  • Nginx (lekki serwer HTTP)

Moim zdaniem rozwiązania dzielą się na dwa obozy: czysty obóz Java, taki jak Glassfish; lub rozdzielony obóz, taki jak nasz obecny Apache + Tomcat. Podoba nam się pomysł czystego rozwiązania Java, ponieważ mniej części ruchomych powinno oznaczać mniej błędów; ale czy któryś z nich obsługuje PHP, .htaccesspliki itp.?

Teoretycznie możemy dokonać podziału w inny sposób - mieć prosty interfejs, który pośredniczy w Apache tylko na tych bitach, które wymagają tych funkcji - ale w praktyce byłoby to 80% żądań.

Jakie opcje sugerują ludzie?

Marcus Downing
źródło
Czy mógłbyś rozwinąć swój „irytujący problem z show-stoperem” nieco bardziej, czy jest to zupełnie nieistotne?
zaznacz
Kliknij link do strony StackOverflow, aby uzyskać więcej informacji. Jest to błąd polegający na tym, że klienci otrzymują niewłaściwą odpowiedź - czasami uzyskują pliki JS lub CSS zamiast HTML, lub po prostu niewłaściwą stronę. Próbowaliśmy prawie wszystkiego w Apache i Tomcat, jakie możemy wymyślić.
Marcus Downing

Odpowiedzi:

7

Podejrzewam, że twój problem jest związany z AJP.

Kilka tygodni temu byłem na kursie z jednym z głównych programistów Tomcat (on go prowadził), jego rada polegała na unikaniu AJP i mod-JK itp. Oraz trzymaniu się zwykłego mod-proxy HTTP.

Powody:

  1. To zdecydowanie najbardziej dojrzałe i stabilne złącze Tomcat.
  2. Żadna implementacja AJP nie była konsekwentnie rozwijana; oba projekty nieco przestały działać.
  3. W tej sytuacji NBIO nie powoduje żadnego wzrostu wydajności w świecie rzeczywistym w porównaniu z blokowaniem IO.

Moja rada, spróbuj użyć zwykłego mod-proxy HTTP przy obecnej konfiguracji. Jest to najmniejsza zmiana dla Ciebie i przeniesie Cię do najczęściej stosowanej i stabilnej architektury wdrażania Tomcat.

/ Richy


źródło
Chyba mógłbym spróbować. Czy masz jakieś twarde liczby dotyczące różnicy w wydajności?
Marcus Downing
Jak mogę korzystać ze zwykłego mod-proxy i nadal otrzymywać prawidłowe nazwy hostów przychodzące do Tomcat? Jestem prawie pewien, że w tej chwili wszyscy są uznawani za hostów lokalnych.
Marcus Downing
2
ProxyPreserveHost On jest prawdopodobnie tym, czego szukasz. httpd.apache.org/docs/2.2/mod/mod_proxy.html#proxypreservehost
Stephen Veiss
5

Mój obecny preferowany stos to użycie nginx jako zamiennika Apache. Gdziekolwiek to konieczne, php-fpm zaspokaja potrzebę PHP. Taka konfiguracja sprawdziła się przy wdrażaniu aplikacji takich jak Rails, Magento i SugarCRM.

Jauder Ho
źródło
4

Glassfish będzie bardziej skalowalny niż Tomcat, ponieważ wykorzystuje Grizzly (oparty na NIO). Nie masz wielu opcji innych niż odmiany Tomcat, Jetty lub Glassfish z powodu wymagań Java. PHP można uruchomić za pomocą Quercus , ale może być lepiej po prostu wdrożyć go za pomocą Nginx.

Jozuego
źródło
2

Istnieją implementacje PHP na Javie. Ten, który znam (ale go nie użyłem), to ten . Jest post na blogu, w jaki sposób zainstalować go na GlassFish (w tym WordPress), ale myślę, że instalacja na tomcat jest taka sama. Jeśli chodzi o .htaccess, nie napisałeś, co dokładnie tam masz, ale jeśli chodzi o przepisywanie adresów URL, to istnieje UrlRewriteFilter, który wykonuje tę samą pracę z tą samą semantyką.

David Rabinowitz
źródło
Pliki .htaccess to w większości pliki generowane przez WordPress, więc zawierają kilka prostych RewriteRules
Marcus Downing
Wydaje mi się, że PHP ich nie obsługuje, ale nie powinno być trudno mieć proces, który je odczytuje i przekazuje definicje do filtra.
David Rabinowitz