Servlets auf V-Server

Sensonaut

New Member
Hallo Ihr!

Ich würde gerne Java-Servlets auf meinem vrtuellen Server ausführen. Wenn ich Tomcat starte und ein JSP Servlet in das wepapps-Verzeichnis von Tomcat stelle, kann ich dieses auch mit http://meinserver.provider.de:8080/servlet.jsp aufrufen. Nun habe ich aber zwei Wünsche:

Zum einen möchte ich die Servlets unter einem Useraccount zugeordneten Domain ausführen können. Also ich habe mit Confixx einen Reseller und einen Kunden eingerichtet (das bin natürlich ich selbst). Auf diesen Kunden verweist eine bestimmte Domain, über die auch meine Website zu erreichen ist. Nun möchte ich dort auch direkt JSPs aufrufen können und nicht über die Domain des Servers.

Und zum anderen stört mich die Angabe des Ports 8080. Auf diese Angabe möchte ich möglichst verzichten. Im Ergebnis soll das ganze denn per http://www.userdomain.de/servlet.jsp aufgerufen werden können.

Wie kann ich das bewerkstelligen? Brauche ich dazu noch bestimmte Packages oder Module und was muss ich konfigurieren?


Titus
 
Du suchst den Apache-Tomcat-Connector.

Ah, prima. Den habe ich nun installiert. Ich habe auch die Datei workers.properties erstellt. Nun kann ich das Servlet schonmal über meine Domain aufrufen: :)

http://www.meinedomein.de:8080/jsp/servlet.jsp

Darin stört mich aber noch die Angabe des Ports 8080. Wie kann ich erreichen, dass die Servlets auch unter Port 80 gefunden werden?


Titus
 
Die Doku hast Du aber nicht zufällig dazu gelesen, oder?
Nur kurz das wichtige:
Port 8080 ist der Tomcat selbst.
Port 80 ist Apache, der mit Hilfe des Connectors auf Tomcat zugreifen kann.
Du mußt Dich schon ein bisschen mehr bemühen. Zur Not gibt es unzählige Howto dazu bei Google.

huschi.
 
Die Doku hast Du aber nicht zufällig dazu gelesen, oder?
Du mußt Dich schon ein bisschen mehr bemühen.
huschi.

Ich habe hier zwei Bücher liegen, die wenn's in Richtung JSP geht, leider am Ende sind. Habe bereits unzählige Dokus zu dem Thema gelesen. Im Internet finde entweder unzureichend beantwortete Fragen ich meistens nur aus dem Zusammenhang gerissene einzelne Abhandlungen. Und wenn, dann beziehen sie sich immer auf eine von den anderen zahlreichen Linux-Distributionen, andere Version oder andere Apache oder Tomcat-Versionen. Äußert selten findet man mal eine Datei dort, wo sie laut Doku sein sollte (der Befehl find ist inzwischen mein Lieblingsbefehl). Alleine für die beiden hier im Forum angefragten Themen habe ich vermutlich schon ca. 20 Stunden in Sand gesetzt.

Vielleicht bin ich trotz 30 Jahren Computer-Wissen und Erfahrungen mit 8 Betriebssystemen zu blöd für Linux. Aber dass ich mich nicht bemühe möchte ich mir nicht vorwerfen lassen. Sicherlich könnte ich es mir auch in 10 bis 20 weiteren Stunden irgendwie zurecht frickeln. Ich frage aber hier im Forum, um nicht irgendwas zu konfigurieren, sondern das nach Ansicht erfahrener Leute richtige.


Titus
 
Hier geht es nicht um Linux oder nicht Linux. Sondern um Apache und Tomcat.
Es mag vielleicht Verwirrung stiften, daß beide Software-Pakete von der Apache-Group entwickelt und gemanaged werden. Aber es sind Beides zwei komplett unterschiedliche Software-Pakete.

Und dazwischen gibt es den Connector mod_jk.
Das ist das ganze Geheimnis.
Denn nur der ist wichtig. Und nur der ist dafür verantwortlich, daß JSP-Seiten über den Apache am Port 80 abrufbar sind.

Konfigurierungsfehler findest Du am besten anhand vom Logfile /var/log/apache2/mod_jk. (Vorausgesetzt es ist so konfiguriert...)

huschi.
 
Erster Tipp: Konfiguriere den tomcat in der server.xml nur auf 127.0.0.1, damit kommt man von aussen erstmal nicht auf deinen Tomcat, sondern muss über den Apache.

Mein Tomcat-Setup sieht wie folgt aus:

Eine Datei /etc/apache2/workers.properties:
Code:
worker.list = mysite_tld

worker.mysite_tld.type=ajp13
worker.mysite_tld.host=localhost
worker.mysite_tld.port=8080

(das mysite_tld ist jetzt beispielhaft; was du da nimmst, ist egal, ich nehm bei mir halt den Domainname, damit ich besser zurecht komme. Es muss halt konsistent sein.)

Irgendwie in der Apache-Config:
Code:
LoadModule jk_module /usr/lib/apache2/modules/mod_jk.so
JkWorkersFile /etc/apache2/workers.properties
JkLogfile /var/log/apache2/jk.log
JKLogLevel Info

Damit wird das mod_jk entsprechend geladen. Jetzt muss man nur noch die URIs auf die entsprechenden Worker konfigurieren:

Code:
JKMount /* mysite_tld

Wenn du das im entsprechenden Context (also innerhalb eines VirtualHost) entsprechend hinschreibst, werden alle Requests auf diesen vhost auf den tomcat umgeleitet.
 
Hallo Amnesie,

erstmal danke für deine Beschreibung. Ich habe alles so eingerichtet. Leider funktioniert es aber noch nicht so ganz. Beim Aufruf einer JSP dauert es einige Sekunden und dann erhalte ich die Nachricht "Service Temporarily Unavailable". Laut jk-Protokoll kann der Apache wohl den Tomcat noch nicht erreichen:

Code:
[Fri Aug 31 17:36:30.087 2007] [28112:1076974560] [error] ajp_service::jk_ajp_co
mmon.c (2097): (mydomain.de) Connecting to tomcat failed. Tomcat is probably no
t started or is listening on the wrong port
[Fri Aug 31 17:41:24.360 2007] [15914:1076974560] [error] init_jk::mod_jk.c (273
2): Initializing shm:/srv/www/logs/jk-runtime-status.15914 errno=2. Load balanci
ng workers will not function properly.

Ich hatte allerdings den Tomcat noch nicht in der Server.xml auf 127.0.0.1 gestellt. Einfach weil ich mir auch hier nicht sicher bin, wie das geht. Bei <Engine Name Default Host> steht doch bereits localhost. Oder hat das garnichts damit zu tun?!? :o

Titus
 
Last edited by a moderator:
Dann sollest du mal schauen, wo dein tomcat lauscht.
Code:
netstat -an | grep -i listen
ist da dein Freund.
 
...meine Test-JSP wird nun korrekt angezeigt!! Amnesie hatte recht, aber in der workers.properties port 8080 angegeben (siehe oben). Ich habe das mal auf 8009 geändert und nun läuft alles prima. :D

Trotzdem würde mich noch interessieren, wie ich dem Tomcat so einrichten kann, dass von Außen keiner drauf kann und immer alles über den Apache läuft. Es war ja bereits von der server.xml die Rede.:cool:

Titus
 
die conf/server.xml
Code:
<!-- Define a non-SSL Coyote HTTP/1.1 Connector on port 8080 -->
    <Connector port="10100"  address="127.0.0.1"
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
               enableLookups="false" redirectPort="8443" acceptCount="100"
               debug="0" connectionTimeout="20000"
               disableUploadTimeout="true" />

Dort fügst du dann die bind-Adresse entsprechend ein. Jeder connector sollte nur auf dem localhost hören, kontrolliere das immer mit dem netstat nach. Ansonsten fährt dir noch einer remote den tomcat runter.
 
Back
Top