tiggalot
Goto Top

Apache und Tomcat auf selbem Port

Hallo,

Ich würde gerne wissen ob es möglich ist einen Apache2 und einen Tomcat6 Server auf dem selben Server mit zwei NICs, und damit zwei IPs, auf dem selben Port zu betreiben.

Wie das nunmal so läuft habe ich einen Debian Server für zwei verschiedene Anwendungen. Zum einen hätten wir da eine eLearning Plattform, die sich mit einem klassischen LAMP begnügt, und dann hätten wir ein XWiki, das auf Java basiert und daher einen Tomcat braucht. Aufgrund programmiertechnischer Gegebenheiten funktioniert das XWiki wohl nicht 100%ig, wenn es durch mod_jk hinter dem Apache steckt...

Mein Server hat zwei IPs über zwei Netzwerkkarten, eth0 172.16.0.142 und eth1 172.16.0.144.

Zunächst habe ich den Tomcat Server installiert und dazu gebracht das er auf Port 80 läuft und nur auf eth0 anspricht.
Per apt-get wurden tomcat6 und tomcat6-admin installiert

/etc/default/tomcat6
...
TOMCAT6_SECURITY=no
....
AUTHBIND=yes
...

/etc/tomcat6/server.xml
...
 <Connector port="80" protocol="HTTP/1.1"  
               address="172.16.0.142"  
               connectionTimeout="20000"  
               URIEncoding="UTF-8"  
               redirectPort="8443" />  
...

Nachdem ich den Tomcat gestartet habe konnte ich erfolgreich die Default Seite des Tomcat im Browser sehen.

Im nächsten Schritt habe ich den Apache installiert und versucht ihm zu sagen das er nur auf eth1 Port hören soll.
/etc/apache2/ports.conf
...
Listen 172.16.0.144:80
...

Der Virtuelle Host den ich fürs eLearning angelegt habe soll auch nur auf eth1 reagieren
/etc/apache2/sites-enabled/learning
<VirtualHost 172.16.0.144:80>
...

Wenn ich nun versuche den Apache zu starten bekomme ich einen Fehler, das der Port schon in Verwendung wäre. Wenn ich den Tomcat schließe kann ich den Apache starten. Danach den Tomcat wieder starten klappt allerdings nicht wirklich. In der Log Datei steht dann letztendlich ebenfalls das der Port nicht verfügbar ist.

Gibt es noch etwas das ich übersehen habe, oder ist es wirklich nicht Möglich den Tomcat und den Apache gleichzeitig auf Port 80 auf verschiedene IPs zu binden? Momentan habe ich den Tomcat auf Port 8080 umgestellt, und könnte das notfalls auch weiter so laufen lassen, aber leider hat der Nutzerkreis der auf das XWiki zugreift nur einen geringen IT-Wissensstand und ich habe keine Lust alle zwei Tage angerufen zu werden, weil etwas angeblich nicht funktioniert und in Wirklichkeit nur das :8080 vergessen wurde.

LG

Content-ID: 171182

Url: https://administrator.de/contentid/171182

Ausgedruckt am: 23.11.2024 um 04:11 Uhr

16568
16568 09.08.2011 um 14:53:39 Uhr
Goto Top
Doch, dat geht...

Leider ist meine Glaskugel etwas trübe...


Lonesome Walker
Tiggalot
Tiggalot 09.08.2011 um 17:00:44 Uhr
Goto Top
Essig soll bei trübem Glas helfen ;)

Wäre dir sehr dankbar, wenn du da nochmal bissl nachschauen könntest.

Lg
Tigga
16568
16568 09.08.2011 um 17:34:16 Uhr
Goto Top
Tja, leider ist die Glaskugel auch mit Essig sehr trübe...

Denk doch mal nach...
Was wird hier wohl fehlen...?


Lonesome Walker
dog
dog 09.08.2011 um 17:57:26 Uhr
Goto Top
Wenn schon nicht mod_jk, dann mod_proxy aber doch keinen Tomcat auf Port 80...
Tiggalot
Tiggalot 10.08.2011 um 09:00:51 Uhr
Goto Top
Vermutlich fehlt ein zweiter Server der das macht...
Sorry, wenn ich in den letzten 1,5 Tagen in denen ich mich damit befasst habe auf eine Lösung gestossen wäre die funktioniert, dann hätte ich hier keine Frage gestellt.
Habe bisher nur einfache LAMPs mit 2-3 virtuellen Hosts aufgesetzt, und von Tomcat habe ich nicht wirklich Ahnung.

Lg
Tigga
16568
16568 10.08.2011 um 11:45:59 Uhr
Goto Top
Okay, dann zieh ich Dir halt mal den Wurm aus der Nase:

WELCHE VERSION von Debian?
Aktuell gepatcht?
Wie war Dein Installationsvorgehen?
(apt-get oder aptitude? Welche Pakete genau?)
Wie is der Inhalt Deiner Configs?

Man kann nur helfen, wenn man auch was preis gibt...

mod_jk ist bekannt dafür, nicht in jeder Konstellation zu laufen, aber bisher hatte ich nur wenig Probleme damit.
Wenn man dann noch die Chance hat, dafür sogar eine eigene IP zu kriegen, dann sehe ich da ohnehin keine Probleme...


Lonesome Walker
Tiggalot
Tiggalot 10.08.2011 um 16:45:13 Uhr
Goto Top
Die Installation habe ich gemäß einer Anleitung gemacht die ich bekommen habe. Mir wurde gesagt das wir wenn irgendmöglich mod_jk vermeiden sollen, weil es die Performance des auf XWiki basierenden Systems negativ beeinflusst.

Debian Wheezy DVD Installation gestartet. Experten Installation, da sonst Grub nicht mit dem SAS Controler klar kommt.
Reine Basisinstallation und dabei bereits einen schweizer Mirror als apt-Repository reingenommen. Root Zugriff per SSH gesperrt, lokalen Nutzer mit sudo Rechten ausgestattet.

Als allererstes danach habe ich die beiden Netzwerkkarten dazu gebracht beim Systemstart beide zu starten und sich vom DHCP eine Adresse zu beziehen. Also folgendes in der /etc/network/interfaces eingetragen
# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
allow-hotplug eth0
allow-hotplug eth1
Danach mittels apt-get openssh-server installiert und fortan alles remote per SSH gemacht.

Per apt-get install zunächst den Tomcat und ein Java JDK installiert
apt-get install tomcat6 tomcat6-admin sun-java6-jdk
Dann die /etc/default/tomcat6 mit vi bearbeitet, um das Java Verzeichnis anzupassen, Tomcat Security auf off zu setzen und Tomcat mittels AUTHBIND zu ermöglichen auf einem der well known Ports zu agieren
TOMCAT6_USER=tomcat6
#<!-- EDITED HERE
JAVA_HOME=/usr/lib/jvm/java-6-sun
#<!-- EDITED -->
JAVA_OPTS="-Djava.awt.headless=true -Xmx128m -XX:+UseConcMarkSweepGC" 
#<!-- EDITED HERE
TOMCAT6_SECURITY=no
#<!-- EDITED -->
#<!-- EDITED HERE
AUTHBIND=yes
#<!-- EDITED -->
Danach in der /etc/tomcat6/server.xml meinen Connector auf Port 80 an die 1. IP gebunden
<?xml version='1.0' encoding='utf-8'?>  
<!-- EDITED HERE -->
<Server port="9005" shutdown="SHUTDOWN">  
<!-- EDITED -->

  <Listener className="org.apache.catalina.core.JasperListener" />  
  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />  
  <Listener className="org.apache.catalina.mbeans.ServerLifecycleListener" />  
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />  

  <GlobalNamingResources>
    <Resource name="UserDatabase" auth="Container"  
              type="org.apache.catalina.UserDatabase"  
              description="User database that can be updated and saved"  
              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"  
              pathname="conf/tomcat-users.xml" />  
  </GlobalNamingResources>

  <Service name="Catalina">  

<!-- EDITED HERE -->
    <Connector port="80" protocol="HTTP/1.1"  
               address="192.168.0.142"  
               connectionTimeout="20000"  
               URIEncoding="UTF-8"  
               redirectPort="8443" />  
<!-- EDITED -->

    <Engine name="Catalina" defaultHost="localhost">  

      <Realm className="org.apache.catalina.realm.UserDatabaseRealm"  
             resourceName="UserDatabase"/>  

      <Host name="localhost"  appBase="webapps"  
            unpackWARs="true" autoDeploy="true"  
            xmlValidation="false" xmlNamespaceAware="false">  
      </Host>
    </Engine>
  </Service>
</Server>

Die /etc/tomcat6/tomcat-users.xml bearbeitet
<?xml version='1.0' encoding='utf-8'?> 
<tomcat-users>
  <role rolename="tomcat"/> 
  <role rolename="manager"/> 
  <role rolename="admin"/> 
  <user username="tomcat" password="*****" roles="tomcat,admin,manager"/> 
</tomcat-users>

An diesem Punkt habe ich den Tomcat mit /etc/init.d/tomcat6 restart die Konfiguration übernehmen lassen und konnte auch über Port 80 auf die Default index.htm von Tomcat per Browser zugreifen

Als nächstes habe ich den Apache installiert
apt-get install apache2
In der /etc/apache2/ports.conf habe ich den Apache auf die 2. IP gebunden
<!-- EDITED HERE -->
Listen 192.168.0.144:80
<!-- EDITED -->

<IfModule mod_ssl.c>
    Listen 443
</IfModule>

<IfModule mod_gnutls.c>
    Listen 443
</IfModule>
Habe den default Eintrag aus /etc/apache2/sites-enabled gelöscht und mir aus dessen Konfiguration einen eigenen erstellt
/etc/apache2/sites-available/custom
#<!-- EDITED HERE -->
<VirtualHost 192.168.0.144:80>
        ServerAdmin admin@server.com
        ServerName server2.server.com
        DocumentRoot /var/www/learning
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /var/www/learning/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
        </Directory>
#<!-- EDITED -->
        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
        <Directory "/usr/lib/cgi-bin"> 
                AllowOverride None
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                Order allow,deny
                Allow from all
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/error.log

        LogLevel warn

        CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>
Dann einen Symlink in sites-enabled dazu erstellt.

Wenn ich nun versucht habe mit /etc/init.d/apache2 start den Apache zu starten bekam ich eine Fehlermeldung bekommen in der Sinngemäß stand das der Port schon in Verwendung ist.
Wenn ich den Tomcat gestoppt habe konnte ich den Apache starten, aber bekam danach beim Versuch den Tomcat zu starten eine Fehlermeldung...
Tiggalot
Tiggalot 10.08.2011 um 16:52:53 Uhr
Goto Top
Nachdem ich die Dokumentation zu mod_proxy überflogen (heute ist einer der Tage an denen man irgendwie zu gernichts kommt) habe weiß ich nicht ob das funktionieren wird.

Unser XWiki arbeitet mit verschiedenen Mandanten, die mit einer URL angesprochen werden müssen, und ich konnte jetzt auf die schnelle nichts finden um das zu gewährleisten. Aber wie gesagt, ich habe die Doku noch nicht wirklich verinnerlicht
16568
16568 10.08.2011 um 18:16:04 Uhr
Goto Top
Aaalso:

1. Wheezy -> testing -> NEVER EVER PRODUKTIV.

2. sun-java6-jre <- is das auch installiert???

3. editiere mal Deine sites-available/custom auf den Anfang hier:
NameVirtualHost 192.168.0.144:80
<VirtualHost 192.168.0.144:80>

4. in der ports.conf hast Du ja:
<IfModule mod_ssl.c> 
    Listen 443 
</IfModule> 
<IfModule mod_gnutls.c> 
    Listen 443 
</IfModule>

Da sollte man dann auch ma die IP dazukleben...

Und dann mal den Tomcatz abwürgen, Apache abwürgen, Tomcat starten, Apachen starten.

Was kommt nu?


Lonesome Walker
(Debian Consultant, der gerade mal eine VM aufsetzt, um das mit Wheezy nachzuvollziehen... :-P )
Was soll ich sagen... geht. face-smile
Tiggalot
Tiggalot 11.08.2011 um 10:10:40 Uhr
Goto Top
Bei mir hat das so direkt leider nicht funktioniert. Der Apache lief ohne Probleme an, aber der Tomcat hat zwar beim Start nichts direkt gesagt, aber erreichbar war er trotzdem nicht.

Hatte dann nochmal einen Blick in die catalina.out geworfen und dort stand dann
java.net.SocketException: No such file or directory
Dies, und das Schlagwort Tomcat6, bei google eingegeben hat mich dazu geführt das ich beim authbind noch etwas anpassen musste.

Also mit vi die /etc/authbind/byuid/107 geöffnet und wie folgt geändert
#0.0.0.0/0:1,1023
192.168.0.142/24:1,1023

Dann den Tomcat nochmal durchstarten lassen und jetzt funktioniert es... Irgendwie... Ich weiß nicht ob die miese Performance die ich da gerade rausbekomme am Server liegt, oder ob unsere IT-Abteilung mal wieder am Netz herumbastelt (machen die immer genau dann gerne wenn man es gerad nicht brauchen kann)...

Ich werde das jetzt mal übers Wochenende so laufen lassen. Sollte sich das von der Performance her nicht einpendeln werde ich es wieder zurückstellen.

Auf jeden Fall schonmal vielen herzlichen Dank für die Hilfe
Lg
Tigga
16568
16568 11.08.2011 um 16:27:56 Uhr
Goto Top
Zum Thema Performance:

sehr viele berichten davon, seit sie den Tomcat auf einen anderen Port gebogen hätten, wären da Probleme.
Keine Ahnung, ob da was dran ist, aber ich war eh nie ein Fan von Tomcat...


Lonesome Walker
Tiggalot
Tiggalot 12.08.2011 um 07:51:26 Uhr
Goto Top
Mitlerweile hat es sich scheinbar eingependelt. Von der Performance kann ich subjektiv keinen Unterschied mehr zu vorher feststellen.
Entweder mußte sich der Server erst an die neue Situation gewöhnen, oder die IT hat wirklich wieder am Netz gebastelt.

Lg
Tigga