Hali,
egy -számomra- eléggé összetett problémába futottam:
a server1.hu-n fut egy apache, megfelelően beállított DocumentRoot-tal, és kiszolgálja a /index.html-t.
Fut rajta egy tomcat is, és az apache-nak meg van mondva JkMount-tal, hogy a http://server1.hu/servlet1-re jövő kéréseket a tomcatnek továbbítsa.
(JkMount /servlet1* worker1)
Eddig OK, servlet lefut, tomcat válaszol.Le van foglalva a server2.hu gépnév is, és ez a név ugyanarra az IP-re mutat, mint a server1.hu.
A feladat, hogy ha a server2.hu-ra jön egy kérés (http://server2.hu/), akkor automatikusan a /servlet1 szolgálja ki, tehát hogy oda továbbítódjon a kérelem. A tomcat-nek.
Addig eljutottam, hogy az apache ki van okítva name based virtualhost-tal, hogy egy másik DocumentRoot-ot használjon a második gépnév esetén, de mégis mit írjak be DocumentRootnak, ha egyszer az egy ilyen tomcat által kiszolgált servlet-izé? Soha nem is létezett olyan DocumentRoot, hogy servlet1, mert ezt mindig is a tomcat kezelte le a JkMount hatására.
- 3979 megtekintés
Hozzászólások
nem kell documentroot, hiszen a kérés átkerül a Tomcat-hez a 8180 vagy 8080 -as portra!
httpd.conf-ba létrehozod a vhostot +jkmount, ahogy írtad és megcsinálod a tomcatnek is a server.xml-ben a vhostot...
"Addig eljutottam, hogy az apache ki van okítva name based virtualhost-tal, hogy egy másik DocumentRoot-ot használjon a második gépnév esetén, de mégis mit írjak be DocumentRootnak, ha egyszer az egy ilyen tomcat által kiszolgált servlet-izé? Soha nem is létezett olyan DocumentRoot, hogy servlet1, mert ezt mindig is a tomcat kezelte le a JkMount hatására." - ezt legyél szíves fogalmazd át, mert nem bírom kibogozni, hogy mit is akarsz kérdezni!? Az a baj, hogy nem tudod hogy miként kell a tomcatben VHostokat létrehozni, vagy mi az izé?
- A hozzászóláshoz be kell jelentkezni
Bocs az idétlen fogalmazásért.
A kérdésem az, hogy hogyan lehet az apache-ot úgy beállítani, hogy egy *bizonyos* hostnévre (server2.hu) jövő requestet a tomcatnek továbbítson, méghozzá úgy, hogy a tomcat azt is tudja, hogy melyik szervlet kell hogy kiszolgálja a kérést.
Tehát most így működik:
server1.hu => apache válaszol az index.html-lel
server1.hu/servlet1 => tomcat válaszol a megfelelő servlet futtatásával
server2.hu => apache válaszol az index.html-lel
server2.hu/servlet1 => tomcat válaszol a megfelelő servlet futtatásával
Amit szeretnék, hogy történjen:
server1.hu => apache válaszol az index.html-lel
server1.hu/servlet1 => tomcat válaszol a megfelelő servlet futtatásával
server2.hu => tomcat válaszol a server1 futtatásával
server2.hu/servlet1 => erre meg azt csinál, amit akar, felőlem 404 is jöhet.
- A hozzászóláshoz be kell jelentkezni
Az "azt csinál, amit akar", azt jelenti, hogy be se akarod engedni a Tomcat felé? Mert ilyenkor csak annyi a teendő, hogy a JkMountot kizárólag a server1 VirtualHost-jába rakod be az Apache alatt.
- A hozzászóláshoz be kell jelentkezni
De ha JkMountot csak a server1 VirtualHost-jába rakom bele, akkor ha valaki a server2-t keresi, akkor hogy fog a kérés eljutni a tomcathez?
- A hozzászóláshoz be kell jelentkezni
Úgy, hogy mod_rewrite-tal átírod. (Esetleg RedirectPermanent-tel, de azt az URL-ben is látni fogja, ez nem mindig szerencsés)
- A hozzászóláshoz be kell jelentkezni
Bár még nincs kész a szerver átkonfigurálása, egy tesztrendszeren kipróbáltam, és már most látszik, hogy működni fog a dolog ezzel a rewrite-tal.
Köszi a tippet!
- A hozzászóláshoz be kell jelentkezni
A jó hír, hogy HTTP-re rememkül működik ez a mod_rewrite.
Viszont ugyanebben a felállásban SSL-lel is kellene hogy működjön (a 8443-as porton kresztül).
És hát úgy már nem és semmit a rewrite-om.
Ezzel a konfigurációval megy a sima http átirányítás:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^.*server2\.hu [NC]
RewriteCond %{REQUEST_URI} !^/servlet1
RewriteRule ^/(.*)$ /servlet1/ [R]
Viszont ez nem irányítja át, ha https-sel nyitom meg az oldalt. (Talán azért, mert a titkosított HTTP header-be nem lát bele?) Van erre valami workaround? Aggasztóan a neten sem találtam semi használhatót.
- A hozzászóláshoz be kell jelentkezni
Keress meg emailben, mert ezt meg kéne inkább néznem közelebbről :) marczi kukac dev-labs.com
- A hozzászóláshoz be kell jelentkezni
<Alias>server2.hu</Alias>
Ez még kelleni fog a Tomcat server.xml-jébe.
- A hozzászóláshoz be kell jelentkezni
Te értetted, hogy mi volt a probléma?
- A hozzászóláshoz be kell jelentkezni
Rendben, és a httpd.conf-ban hogyan kell ezt a "name based virtual host" beállítást megejteni?
Azt tudom, hogy hogy kell olyan bejegyzést tenni, amitől egy adott host-nevet elkülönítve kezel. De abba a vhost definícióba mi kerüljön még bele? Mit csináljon az apache, ha illeszkedik a kérésben szereplő host-névre az én vhost definicióm (a server2.hu)? Hogy lehetne pl megmondani, hogy kezelje úgy, mintha server1.hu/servlet1 lett volna az a lekérés?
- A hozzászóláshoz be kell jelentkezni
Lehet, h még nem értem teljesen a problémát, de ha viszont az kell, hogy a server2.hu/servlet1-re passzolja tovább a server1.hu/servlet1-nek kell lefutnia, akkor szintén az a felállás, mint amit előbb írtam, azaz csak a server1-nél vedd fel a JkMount-ot, a server2.hu esetében pedig RedirectPermanent vagy mod_rewrite. A másik lehetőség, amit feljebb írtak, hogy alias-ként a Tomcat konfigjába berakod a server2-t a server1 contexthez.
- A hozzászóláshoz be kell jelentkezni
Nna ilyen RedirectPermanent-tel még nem is találkoztam. Holnap kipróbálom, amiket írtatok.
A lényeg, hogy server2.hu=server1.hu/servlet1 egyenlőség fönnálljon, ahol server1 nem egy sima könyvtár, hanem egy tomcat számára föl-JkMount-olt szervlet-könyvtár.
- A hozzászóláshoz be kell jelentkezni
Akkor tényleg csak egy Alias kell a server1-hez a Tomcat alatt. A Tomcat így mind a server1.hu, mind a server2.hu esetében ugyanazt a servletet fogja meghívni.
- A hozzászóláshoz be kell jelentkezni
en a proxypass -al is tennek egy probat :D)
- A hozzászóláshoz be kell jelentkezni
Szia!
Úgy tudom, hogy a jk_mount nem egy mai valami. Én sosem használtam, viszont itt van egy, a proxy_ajp httpd modullal készült konfiguráció. Itt értelemszerűen a tomcat ugyanazon a szerveren van, mint a httpd.
Ez a
httpd.conf
-ba kell:
#
# Use name-based virtual hosting. - Ez elől a sor elől elvileg csak ki kell
# szedni a komment-jelet.
#
NameVirtualHost *:80
# Ez az abc.com és a www.abc.com kéréseit adja oda a tomcatnek.
# Itt még nem baj, hogy nincs megadva, hogy melyik tomcates
# webalkalmazás kell, hogy kiszolgálja a kérést, mert az az adat a
# tomcat server.xml-jébe kell, ahogy később is látni fogod.
<VirtualHost *:80>
ServerName abc.com
ServerAlias www.abc.com
ProxyPass / ajp://localhost:8009/
ProxyPassReverse / ajp://localhost:8009/
</VirtualHost>
# ilyet is lehet csinálni a statikus adatoknak, hogy a .war fájljaidat
# ne kelljen képekkel/egyebekkel telepakolni
<VirtualHost *:80>
ServerName data.abc.com
DocumentRoot /var/www/html/abc.com
</VirtualHost>
# ==============
# Másik host, ugyanilyen a konfigurációval
<VirtualHost *:80>
ServerName abc2.hu
ServerAlias www.abc2.hu
ProxyPass / ajp://localhost:8009/
ProxyPassReverse / ajp://localhost:8009/
</VirtualHost>
# itt is külön host a statikus adatoknak
<VirtualHost *:80>
ServerName data.abc2.hu
DocumentRoot /var/www/html/abc2.hu
</VirtualHost>
# Most jön a durva trükk: ez a konfiguráció a webalkalmazás
# statikus adatait választja szét a dinamikusaktól, elérési út alapján.
# Így nem kell létrehozni külön aldomaint a statikus adatoknak, mint az
# előbbi példákban: a webalkalmazásból relatív linkekkel lehet hivatkozni
# rájuk.
# Itt konkrétan az img alkönyvtárat a httpd szolgálja ki, minden mást
# pedig a tomcat.
<VirtualHost *:80>
ServerName abc3.hu
ServerAlias www.abc3.hu
DocumentRoot /var/www/html/abc3.hu
ProxyPass /img !
ProxyPass / ajp://localhost:8009/
ProxyPassReverse / ajp://localhost:8009/
</VirtualHost>
# Ez a szerver az előbbiektől eltérő, IP-alapú "beállítása", ezalapján
# kerülnek a kérések a szerverhez, ha csak IP-címmel hivatkoznak rá.
<VirtualHost *:80>
ServerName 123.234.312.41
ProxyPass / ajp://localhost:8009/
ProxyPassReverse / ajp://localhost:8009/
</VirtualHost>
-------------------------------------------------------------------------
Ezek után a /var/lib/tomcat5 könyvtárba kell csinálnod egy vhost_webapps könyvtárat: ide fognak kerülni a .war fájlok.
Most jönnek a vonatkozó részletek a tomcat server.xml-jéből, amiket az Engine ágba kell tenni:
<Host
appBase="vhost_webapps/abc.com"
name="abc.com">
<Alias>www.abc.com</Alias>
</Host>
<Host
appBase="vhost_webapps/abc2.hu"
name="abc2.hu">
<Alias>www.abc2.hu</Alias>
</Host>
<Host
appBase="vhost_webapps/abc3.hu"
name="abc3.hu">
<Alias>www.abc3.hu</Alias>
</Host>
Ezek után a webalkalmazások feltöltése annyi, hogy a .war fájlokat ROOT.war-rá átnevezve és a vhost_webapps megfelelő alkönyvtárába berakva kiszolgálják az egyes domaineket anélkül, hogy mindenféle abc.com/webalknev formájú url-eket kellene beírni.
Én ezt még annyival fűszereztem meg, hogy a szerveren lévő home könyvtáramban lévő, átnevezetlen .war fájlokra mutatnak a vhost_webapps/abc.com stb. könyvtárakban létrehozott ROOT.xml nevű szimbolikus linkek, így amikor felmegyek SFTP-vel a szerverrel, egy szimpla másolással meg tudom oldani a feltöltést.
Ezzel a megoldással egyébként használható a tomcat adminisztrációs felülete, (/manager/html), hogyha a /etc/tomcat5/Catalina/ egyes domaineknek megfelelő könyvtárába (a konfiguráció elvégzése és a webalkalmazás feltöltése után) a /etc/tomcat5/Catalina/localhost/manager.xml-t bemásolod.
Ezzel az ssh-n feltöltős megoldással az a baj, hogy elvész az összes felhasználói munkamenet. Amire még nem találtam megoldást, hogy hogy lehet a webalkalmazásokat úgy frissíteni/újra feltölteni, hogy ez ne történjen meg. Valaki, ötlet?
Más kérdés: mi az a proxypassreverse? A neten összevadászott példák alapján raktam be, de a doksit már lusta voltam elolvasni hozzá.
Üdv
Chreex
- A hozzászóláshoz be kell jelentkezni
Üdv
szenvedek az apache mode_proxy -val.
apache: http://server:80
tomcat: http://server:8080
ha beütöm a böngészőbe hogy http://server:80
akkor a http://server:8080 porton lévő tomcat jöjjön be, de nem Redirect mindenképpen apache2-n keresztül
ServerAdmin postmaster@server
ServerName server
#ProxyPass / http://localhost:8080
#ProxyRemote http://server/ http://server:8080
ProxyRequests Off
ProxyPass / ajp://localhost:8080
ProxyPassReverse / ajp://localhost:8080
WTF miért nem megy?
Forbidden
You don't have permission to access / on this server.
Ugyanezt próbáltam httpd.conf-ban is
Apache2 + tomcat6
mode_proxy
mode_proxy_ajp
mode_proxy_http
betöltve.
- A hozzászóláshoz be kell jelentkezni
apache2.conf
végére beraktam ezt
ProxyPass / http://server:8080
ProxyPassReverse / http://server:8080
[IfModule mod_proxy.c]
ProxyRequests Off
[Proxy *]
Order allow,deny
Allow from all
[/Proxy]
kacsacsőröket átraktam [] -ra mert nem jeleníti meg.
így müxik, ha esetleg valakinek nem működne, ezzel menni fog. (vagy nem :D)
- A hozzászóláshoz be kell jelentkezni
Azért nem megy, mert feltehetőleg mellőzted az alábbi két - egyébként igen hasznos - dokumentáció releváns fejezeteinek elolvasását.
http://httpd.apache.org/docs/2.2/
http://tomcat.apache.org/tomcat-5.5-doc/index.html
Az a helyzet, hogy akárhogyis nézzük, ezek kötelező olvasmányok. ( Ugyanúgy mint pl. a Rómeó és Júliát is kötelező volt elolvasni középsuliban - amit ha megtettél, akkor tudtad az olyan jellegű dolgozatkérdésekre a választ, hogy pl. hogyan jutott be Rómeó Júlia szobájába - azonkívül hogy nehezen...
- A hozzászóláshoz be kell jelentkezni
ServerName www.DOMAINNAME.hu
ServerAlias DOMAINNAME.hu
ProxyPass / ajp://localhost:8009/
ProxyPassReverse / ajp://localhost:8009/
ServerAdmin error@DOMAINNAME.hu
ErrorLog "/var/log/_log"
Nalam igy mukodik a apache tomcat ;)
- A hozzászóláshoz be kell jelentkezni
Gondoltam nem indítok új szálat, problémám hasonló. Szeretnék apache név alapú virtuális hoszthoz ajp proxy-t beállítani. Az apache-ban a következőket állítottam be:
ProxyPass / ajp://192.168.122.102:8009/
ProxyPassReverse / ajp://192.168.122.102:8009/
Tomcatbe deployoltam az alkalmazást -- webapps/foo
Majd a Tomcat-ben kezelem a DNS-eket (server.xml)
<Host name="foo.hu" appBase="webapps"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
<Alias>foo.hu</Alias>
</Host>
Az alkalmazás content.xml-jében pedig a következő szerepel:
<Context path="" docBase="/usr/share/tomcat/webapps/foo"
debug="5" reloadable="true" crossContext="true">
Az a gondom, hogy a ha megnyitom a foo.hu címet, akkor a Tomcat root jön be az alkalmazás root helyett. Mit rontottam el?
- A hozzászóláshoz be kell jelentkezni
up
- A hozzászóláshoz be kell jelentkezni
Ha megnyitod a foo.hu/foo címet akkor a foo apps jön be? Mert ha igen, akkor annyi a dolgod, hogy a foo.war-t ánevezed ROOT.war-ra és úgy deploy-lod.
- A hozzászóláshoz be kell jelentkezni
Pontosan így van. Annyi a problémám, hogy ha ROOT-ra nevezem át akkor egy tomcat-be csak egy alkalmazást tudok deployolni root-ként, nem tudok több progit futtatni egy tomcat-en.
- A hozzászóláshoz be kell jelentkezni