[CF]Apache przed Tomcatem z nadpisywaniem URL [en] Apache + Tomcat + mod_rewrite
by jmail on maj.28, 2010, under PHP / CF / .NET / Java
Po dwunastu godzinach nad wymyślaniem różnych możliwości i googlowaniem w poszukiwaniu rozwiązań Tomcat zaczął działać tak jak JA sobie tego życzę
Nie znalazłem nigdzie działającego tutka, który sprawiłby, żeby Tomcat z Apachem zaczęły gadać i żeby do tego działało przepisywanie urli. Więc zrobiłem własną konfigurację. A o to instrukcja ja to wszystko razem do kupy zebrać
Założenia:
- katalog strony znajduje się w katalogu f:/usr/htdocs/cfpages/site
- katalog stron jest dostępny przez Apache’a
- nasza strona ma adres http://localFirstCFWheels
- konfigurujemy bez mod_jk, bez URLFilter czy jak to gówno się nazywa
- czyste przepisywanie urli przez Apache’a
- Apache Tomcat 6.0.26 Server
- Apache 2.2.13
- Railo 3.1.2.001
- Tomcat jest skonfigurowany do nasłuchiwania na porcie 8100
1. Musisz zainstalować Apache’a, Tomcata i Railo tak, żeby działał w głównym kontekście Tomcata i żeby automatycznie dodawał się do wszystkich stron. Dobry tutorial można znaleźć tutaj: http://corfield.org/entry/Railo_on_Tomcat__multiweb (opuść sekcję dodawania hostów – zrobimy to sami)
2. Musisz zainstalować mod_proxy i mod_rewrite w Apache’u – znajdziesz mnóstwo tutoriali w tym temacie w google’ach
3. Jeżeli masz wszystko przygotowane zatrzymaj obydwa serwery (Apache i Tomcat)
4. Otwórz w edytorze plik ŚciezkDoInstalacjiTomcata/conf/web.xml
5. Znajdź miejsce gdzie masz definiowane serwlety (konfigurowałeś to w punkcie pierwszym)
6. Dodaj
1 2 3 4 5 6 7 8 | <servlet-mapping> <servlet-name>CFMLServlet</servlet-name> <url-pattern>/index.cfm/*</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>CFMLServlet</servlet-name> <url-pattern>/rewrite.cfm/*</url-pattern> </servlet-mapping> |
Po
1 2 3 4 | <servlet-mapping> <servlet-name>CFMLServlet</servlet-name> <url-pattern>*.cfc</url-pattern> </servlet-mapping> |
to pokaże Tomcatowi jak ma serwować przepisane urle (mówię tu w odniesieniu do CFWheels)
7. Otwórz teraz plik server.xml, który jest w tym samym katalogu co web.xml. Przewiń się na sam koniec pliku i znajdź coś takiego:
1 | <Host name="localhost" |
Przewiń plik na dół do ostatniego dodanego
1 2 3 4 | <Host name="localFirstCFWheels" appBase="webapps"> <Context path="" docBase="f:/usr/htdocs/cfpages/site"/> <Alias>www.localFirstCFWheels</Alias> </Host> |
to nakaże Tomcatowi odpalenie nowego hosta. Zapisz plik i zamknij
8. Otwórz plik ŚcieżkaInstalacjiApachea/conf/httpd.conf i odkomentuj (albo dodaj na końcu pliku jeżeli nie masz takiego wpisu)
1 | Include conf/extra/httpd-vhosts.conf |
9. Otwórz ŚcieżkaInstalacjiApachea/conf/extra/hhtpd-vhosts.conf i utwórz nowy wirtualny host (jeżeli wcześniej tego nie robiłeś najpierw zapoznaj się z jakimś tutorialem na ten temat)
a/ deklaracja
1 | <VirtualHost *:80> |
b/ ustawiamy hosta oraz jego aliasy
1 2 3 4 | ServerName localFirstCFWheels ServerAlias localFirstCFWheels DocumentRoot "f:/usr/htdocs/cfpages/site" DirectoryIndex index.cfm |
c/ zabezpieczamy serwer przed przeglądaniem katalogów
1 2 3 4 5 6 | <Directory "f:/usr/htdocs/cfpages/site/"> Options -Indexes FollowSymLinks AllowOverride All Order allow,deny Allow from all </Directory> |
d/ włączamy moduł tłumaczenia urli
1 | RewriteEngine On |
e/ blokujemy otwarte przekazywanie proxy
1 2 3 | <LocationMatch "^[^/]"> Deny from all </LocationMatch> |
f/ Zabezpieczamy globalnie proxy
1 | ProxyRequests Off |
g/ pozwalamy Apache’owi nadpisać urle
1 2 | ProxyPass / http://localFirstCFWheels:8100/ ProxyPassReverse / http://localFirstCFWheels:8100/ |
h/ wymuszamy przekazanie przez proxy oryginalnego hosta
1 | ProxyPreserveHost On |
i/ używamy standardowego warunku przepisywania urli przez cfwheels
1 2 3 | RewriteCond %{REQUEST_URI} !^.*/(flex2gateway|jrunscripts|cfide| cfformgateway|railo-context|files|images|javascripts|miscellaneous| stylesheets|robots.txt|sitemap.xml|rewrite.cfm)($|/.*$) [NC] |
j/ i na końcu dokonujemy samego przepisania url’a
1 | RewriteRule "^/(.*)" http://localFirstCFWheels:8100/rewrite.cfm/$1 [P,QSA,L] |
10. Otwieramy plik settings.cfm z wheelsów i dodaj
1 | <cfset set(urlRewriting="On")> |
zapisz i zamknij
11. Uruchom Tomcata i Apache’a
12. Uruchom stronę http://localFirstCFWheels i ciesz się swoją aplikacją na Tomcacie i pełnym nadpisywaniem urli
Dlaczego przetestowałem i napisałem tą instrukcję? Odpowiedź jest bardzo prosta. Nadal nie znalazłem możliwości uruchomienia Railo na serwerze GlassFish jako modułu dostępnego we wszystkich aplikacjach. A Resin….
Przepraszam z góry jeżeli kogoś uraziłem, ale Resin to kawałek gówna, który byłem zmuszony użyć z racji pewnych zależności. Resin jest dobry dla developerki, ale nie na produkcyjny serwer. Może jakby miała na nim stać jedna strona…. Ustawiłem go na maszynie gdzie mam jeszcze Apache IIS’a i GlassFisha. Na początek zeżarł 300 MB RAM’u. A jak odpaliłem wszystkie aplikacje to się nagle okazało, że nie, że to za mało i zeżarł ponad 1GB ramu. A Tomcat? Tomcat teraz sobie cichutko pierdzi na ok 150 MB RAM’u.
No i najważniejsze. Tomcat jest znacznie znacznie szybszy niż Resin. Przeładowanie aplikacji zajmuje prawie tyle samo czasu co jej wczytanie
Jestem pewny, że będę próbował zainstalować Railo na GlassFish’u ale znalazłem wspaniałą alternatywę na produkcyjny serwer pod aplikacje w ColdFusion
3 Trackbacks / Pingbacks for this entry
Maj 29th, 2010 on 4:46
Maj 29th, 2010 on 19:47
Czerwiec 6th, 2010 on 9:02