Fórum Root.cz
Hlavní témata => Server => Téma založeno: martin 09. 05. 2014, 20:05:04
-
Ahoj,
na serveru mi bezi Tomcat (localhost:8080) a Apache HTTPD (all:80).
Vsechny aplikace jsou dostupne pres url http://tomcat.example.net/APPNAME. Ja ale pro nektere potrebuju vyhradit valstni domenu. Napr. http://tomcat.example.net/TEST chci mit na http://test.cz.
Zde je muj konfigurak Apache:
<VirtualHost *:80>
ServerName tomcat.example.net
DocumentRoot /var/www/tomcat.example.net
ProxyRequests Off
ProxyPreserveHost On
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / http://127.0.0.1:8080/
ProxyPassReverse / http://127.0.0.1:8080/
</VirtualHost>
<VirtualHost *:80>
ServerName test.cz
DocumentRoot /var/www/tomcat.example.net
ProxyRequests Off
ProxyPreserveHost On
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / http://127.0.0.1:8080/test.cz/
ProxyPassReverse / http://127.0.0.1:8080/test.cz/
</VirtualHost>
Pokud nyni k aplikaci pristoupim pres http://tomcat.example.net/TEST funguje to spravne, pokud ale pristoupim pres http://test.cz zobrazi se uvodni stranka, ale vsechny odkazy vedou na http://test.cz/TEST/cil_odkazu (takze se ani nenactou css, protoze maji spatny odkaz).
Proste je za lomitkem vzdy nazev app. V JSP vypisuji adresy pres:
<c:url value="/cil_odkazu" />
Co potrebuju: odkaz (a cela aplikace) http://tomcat.example.net/TEST/info musi byt dostupna na adrese http://test.cz/info a ne na http://test.cz/TEST/info
Moje reseni z apache virtualhosty asi neni nejlepsi, nebo dostatecne. Pravdepodobne se jeste bude muset nejak nastavit tomcat. Jenom nevim jak.
-
Zkusil jsem postupovat podle oficialniho tomcat7 navodu http://tomcat.apache.org/tomcat-7.0-doc/proxy-howto.html
V Apachi mam zapnuto mod_proxy. A takhle vypada muj virtuahlost:
<VirtualHost *:80>
ServerName neco.nekde.cz
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass /mojeApp http://localhost:8081/mojeApp
ProxyPassReverse /mojeApp http://localhost:8081/mojeApp
</VirtualHost>
do nastaveni tomcatu /etc/tomcat7/server.xml jsem pridal:
<Connector port="8081" protocol="HTTP/1.1" connectionTimeout="20000" URIEncoding="UTF-8"
proxyName="neco.nekde.cz" proxyPort="80"/>
Kdyz nyni jdu na adresu http://neco.nekde.cz dostanu chybu 404, kterou vraci apache httpd, pokud zadam http://neco.nekde.cz/mojeApp, funguje to.
Ja ale chci mit aplikaci primo na http://neco.nekde.cz.
Pokud v definici virtualhostu uvedu:
ProxyPass / http://localhost:8081/mojeApp
ProxyPassReverse / http://localhost:8081/mojeApp
Pri pristupu na adresu http://neco.nekde.cz jsem automaticky presmerovan na http://neco.nekde.cz/mojeApp a dostanu chybu 404, kterou tentokrat vrati tomcat.
Kde delam porad chybu? :-(
-
Musíte tu aplikaci na Tomcatu nastavit tak, aby používala contextPath "/" a byla svázaná se zvolenou doménou. Pokud nemáte nějaký vážný důvod, proč před tím Tomcatem máte Apache, použijte samotný Tomcat a konfiguraci Apache pak nemusíte řešit.
-
Já to tedy téměř nepoužívám, ale logicky - název virtuálního hosta by neměl být
localhost, ale jméno domény (jak na straně Apache tak Tomcatu).
ProxyPass / http://neco.nekde.cz:8081/
Jak by jinak ten Tomcat poznal, co má obsloužit za virtuál?
Zkusil jsem postupovat podle oficialniho tomcat7 navodu http://tomcat.apache.org/tomcat-7.0-doc/proxy-howto.html
V Apachi mam zapnuto mod_proxy. A takhle vypada muj virtuahlost:
<VirtualHost *:80>
ServerName neco.nekde.cz
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass /mojeApp http://localhost:8081/mojeApp
ProxyPassReverse /mojeApp http://localhost:8081/mojeApp
</VirtualHost>
do nastaveni tomcatu /etc/tomcat7/server.xml jsem pridal:
<Connector port="8081" protocol="HTTP/1.1" connectionTimeout="20000" URIEncoding="UTF-8"
proxyName="neco.nekde.cz" proxyPort="80"/>
Kdyz nyni jdu na adresu http://neco.nekde.cz dostanu chybu 404, kterou vraci apache httpd, pokud zadam http://neco.nekde.cz/mojeApp, funguje to.
Ja ale chci mit aplikaci primo na http://neco.nekde.cz.
Pokud v definici virtualhostu uvedu:
ProxyPass / http://localhost:8081/mojeApp
ProxyPassReverse / http://localhost:8081/mojeApp
Pri pristupu na adresu http://neco.nekde.cz jsem automaticky presmerovan na http://neco.nekde.cz/mojeApp a dostanu chybu 404, kterou tentokrat vrati tomcat.
Kde delam porad chybu? :-(
-
Musíte tu aplikaci na Tomcatu nastavit tak, aby používala contextPath "/" a byla svázaná se zvolenou doménou. Pokud nemáte nějaký vážný důvod, proč před tím Tomcatem máte Apache, použijte samotný Tomcat a konfiguraci Apache pak nemusíte řešit.
Apache vyhodit nemuzu, potrebuju na stejnem serveru provozovat nekolik PHP aplikaci a mam jen jednu IP.
Já to tedy téměř nepoužívám, ale logicky - název virtuálního hosta by neměl být
localhost, ale jméno domény (jak na straně Apache tak Tomcatu).
ProxyPass / http://neco.nekde.cz:8081/
Jak by jinak ten Tomcat poznal, co má obsloužit za virtuál?
v /etc/tomcat7/server.xml mam aktualne (+ vychozi veci co tam byly):
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
URIEncoding="UTF-8"
redirectPort="8443" />
<Connector port="8081" protocol="HTTP/1.1" connectionTimeout="20000" URIEncoding="UTF-8"
proxyName="neco.nekde.cz"
proxyPort="80"/>
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
<Host name="neco.nekde.cz" unpackWARs="true" autoDeploy="true" appBase="webapps/MOJEAPP">
<Alias>www.neco.nekde.cz</Alias>
<Context path="/" docBase="MOJEAPP" debug="0" reloadable="false"/>
</Host>
Virtualhost apache vypada nasledovne:
<VirtualHost *:80>
ServerName neco.nekde.cz
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / http://localhost:8081/MOJEAPP/ # zkousel jsem i port 8080
ProxyPassReverse / http://localhost:8081/MOJEAPP/
</VirtualHost>
pokud nyni vlezu na adresu http://neco.nekde.cz vidim uvodni stranku, ale jen cisty text. Ve zdrojaku stranky vidim vsechny odkazy ve tvaru:
<script src="/MOJEAPP/static/js.js"></script>
vse vypisuju pres <c:out
Nemel by to resit prave radek <Context path="/" docBase="MOJEAPP" debug="0" reloadable="false"/>?
Nektere navody doporucuji nazvat aplikaci ROOT, jenze tak muze byt jen jedna.
-
Aplikace si občas načítá document root tudíž pokud má být v / tak by tam měla být i v Tomcatu a ne na adrese /MOJEAPP...
Tudíž musí odpovídat na portu 8081 přímo. http://host:8081/ by měl vrátit normálně běžící aplikaci.
<script src="/MOJEAPP/static/js.js"></script> tomu napovídá ne?
Jinak by ta proxy musela měnit i obsah přenášených dat (dá se to, ale je to šílenost).
---
Když tak na to koukám (bože děkuji ti za Nginx) to je fakt naprosto jinej level :) ten Apache a Tomcat je zhůvěřilost.
-
Proč je takový problém vytvořit virtuál pod Tomcatem, na kterém poběží aplikace normálně jak má, jen na portu 8081
a ten se přes proxy (přes tu virtuální doménu) načte do Apache. To je normální řešení...
Prostě http://neco.nekde.cz:8081/ bude normálně fungovat jak má a tu načte Apache, který běží na portu 80
Proč vymýšlet šílené nesmysly a nepřehledné konfigurace?
Aplikace obvykle port neřeší (i když může), cesta už může být v samotné logice aplikace (neměnil bych jí).
-
Když se podíváte do dokumentace k Tomcatu, najdete tam návod (http://tomcat.apache.org/tomcat-8.0-doc/virtual-hosting-howto.html), jak pracovat s virtuálními hosty. Je to daleko snazší, než se pokoušet přepisovat contextPath.
Mimochodem, Jetty umí spouštět i FastCGI (http://www.eclipse.org/jetty/documentation/current/fastcgi.html), takže byste mohl i PHP aplikace provozovat pod tím. Kdybyste místo dvou webových serverů chtěl provozovat jen jeden.