Fórum Root.cz

Hlavní témata => Server => Téma založeno: martin 09. 05. 2014, 20:05:04

Název: Více domén pro Tomcat za Apachem
Přispěvatel: 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:
Kód: [Vybrat]
<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:
Kód: [Vybrat]
<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.
Název: Re:Více domén pro Tomcat za Apachem
Přispěvatel: martin 10. 05. 2014, 02:33:46
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:
Kód: [Vybrat]
<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:
Kód: [Vybrat]
<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:
Kód: [Vybrat]
    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? :-(
Název: Re:Více domén pro Tomcat za Apachem
Přispěvatel: Filip Jirsák 10. 05. 2014, 08:20:50
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.
Název: Re:Více domén pro Tomcat za Apachem
Přispěvatel: Jan Forman 10. 05. 2014, 10:12:29
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:
Kód: [Vybrat]
<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:
Kód: [Vybrat]
<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:
Kód: [Vybrat]
    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? :-(
Název: Re:Více domén pro Tomcat za Apachem
Přispěvatel: tuxmartin 10. 05. 2014, 17:05:18
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):
 
Kód: [Vybrat]
   <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 &quot;%r&quot; %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:
Kód: [Vybrat]
<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:
Kód: [Vybrat]
<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.

Název: Re:Více domén pro Tomcat za Apachem
Přispěvatel: Jan Forman 10. 05. 2014, 17:40:58
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.
Název: Re:Více domén pro Tomcat za Apachem
Přispěvatel: Jan Forman 10. 05. 2014, 17:47:39
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í).
Název: Re:Více domén pro Tomcat za Apachem
Přispěvatel: Filip Jirsák 10. 05. 2014, 18:05:05
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.