Wie bringt man Tomcat dazu, sich an eine IPv4-Adresse zu binden?


32

Ich habe kürzlich Tomcat über ein Installationsskript der apache solr typo3-Community installiert und die letzten 3 Tage damit verbracht, herauszufinden, warum es nicht funktioniert, bis ich zufällig bemerkte, dass ich den Prozess beim Abhören des Ports über "lsof -i" abfragte ", es war an das ipv6 - protokoll gebunden. Ich habe überall gegoogelt und die meisten sagen, dass das Setzen der Adresse auf 0.0.0.0 im Tomcat-Connector dieses Problem behebt, andere sagen, das Setzen von JAVA_OPTS = "- Djava.net.preferIPv4Stack = true" ; Ich habe das erstere ausprobiert, was nicht funktioniert, aber beim letzteren bin ich mir nicht sicher, wo ich es hinstellen soll. Eine Lösung, die ich irgendwo gelesen habe, schlug vor, sie in setenv.sh abzulegenIch kann diese Datei in meiner Tomcat-Installation nicht finden. Ich würde mich im Moment über jede Hilfe freuen. Die Tomcat-Version ist 6.x und das Betriebssystem ist Ubuntu 11.10. Vielen Dank


1
Auf welchen ips / ports hört es über lsof -i?
becomingwisest

@becomingwisest 8080.
Dark Star1

Sie haben Recht - die Datei "setenv.sh" ist nicht im Lieferumfang enthalten. Sie müssen die Datei setenv.sh in Ihrem CATALINA_BASE- oder CATALINA_HOME-Bin-Verzeichnis erstellen. Das Startskript prüft, ob Sie die Datei erstellt haben, ob Sie eine Anpassungsdatei (setenv.sh) erstellt haben. Das Startskript ruft sie auf, ansonsten ignoriert es sie einfach und fährt fort.
Abend

Antworten:


28

Viele schlugen vor, das Startskript zu aktualisieren catalina.sh. Ja, diese Lösung würde funktionieren, aber das catalina.shSkript soll nicht angepasst / aktualisiert werden. Alle Änderungen sollten stattdessen in das Anpassungsskript gehen, dh setenv.sh.

HINWEIS: TOMCAT_HOME/bin/setenv.shexistiert nicht standardmäßig, Sie müssen es erstellen. Überprüfen Sie das catalina.shSkript und Sie werden sehen, dass das Startskript prüft, ob es setenv.shexistiert, und ausgeführt wird, wenn es existiert.

Daher schlage ich vor, dass Sie ein neues TOMCAT_HOME/bin/setenv.shSkript mit einer einzigen Zeile erstellen :

JAVA_OPTS="$JAVA_OPTS -Djava.net.preferIPv4Stack=true -Djava.net.preferIPv4Addresses=true "

3
Ich würde auch CATALINA_OPTS anstelle von JAVA_OPTS verwenden, insbesondere wenn Sie andere JVM-Optionen haben, die Sie beim Starten von Tomcat an JVM übergeben möchten. Wenn Sie JAVA_OPTS verwenden, werden dieselben Optionen an Tomcat-Shutdown übergeben, wahrscheinlich nicht das, was Sie wünschen / erwarten würden. Verwenden Sie stattdessen CATALINA_OPTS :)
nevenc

Ich wähle dies jetzt als Antwort, da die meisten Leute, die dieses Problem heute haben, höchstwahrscheinlich eine neuere Version von Tomcat verwenden würden.
Dark Star1

27

Ok, ich habe es endlich gelöst. Ich wurde angewiesen, dies und Henks Lösung auszuprobieren . Keiner von beiden schien mit dem virtuellen Remote-Server zu funktionieren. Ich vermute, dass der Provider dies verhindert, weil ich auf einem gemeinsam genutzten Kernel-Space bin. Auf jeden Fall habe ich hinzugefügt: JAVA_OPTS= $JAVA_OPTS -Djava.net.preferIPv4Stack=true -Djava.net.preferIPv4Addresseszum Startskript catalina.sh und das schien das Problem der Bindung von tomcat an ipv6 behoben zu haben.


3
Du bist also auf einem VPS mit einem gemeinsam genutzten Kernel ... D'oh!
Henk

Dies scheint bei Kater 8 nicht mehr zu funktionieren.
Ortomala Lokni

1
Bei Tomcat 8 hat diese Option bei mir nicht funktioniert, aber die Antwort von nevenc hat funktioniert.
Edenshaw

4

Die korrekte Syntax zum Ändern von catalina.sh lautet:

JAVA_OPTS=" $JAVA_OPTS -Djava.net.preferIPv4Stack=true -Djava.net.preferIPv4Addresses=true "

3

Wenn Sie dieses Installationsprogramm verwendet haben: " Apache Solr for TYPO3 ", können Sie die Adresse in der Datei ändern server.xml. Die Standardeinstellung zeigt auf localhost. Suchen Sie also nach 127.0.0.1 und ändern Sie es in die gewünschte IPv4-Adresse. Vergessen Sie nicht, Tomcat6 neu zu starten, damit die Änderungen wirksam werden.

UPDATE, 20120521

Siehe meinen Kommentar unten zum Deaktivieren von IPv6 unter Ubuntu 11.10.

Ich habe dies erfolgreich auf einer Virtualbox-VM auf meinem Mac getestet. Die Adresse für den Connector-Port 8080 wurde von 127.0.0.1 in 0.0.0.0 in geändert server.xml.

Wenn Sie IPv6 deaktivieren, wird "tcp6" ausgeblendet, sodass es an eine IPv4-Adresse gebunden ist.

Vor / mit aktiviertem IPv6:

# netstat -anp | grep 8080   
tcp6       0      0 :::8080                 :::*                    LISTEN      1972/java

After / IPv6 deaktiviert:

# netstat -anp | grep 8080   
tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      2045/java

Versuchte dies auch und das hat nicht funktioniert. Netstat zeigt, dass trotz des Prozesses, der an eine IPv4-Adresse gebunden ist, immer noch nach einer IPv6 a la this gesucht wird: tcp6 0 0 XXXX: 8080 ::: * LISTEN. was ich seltsam finde, aber das problem wurde auch auf dem vm meines freundes repliziert, der auf einem mac gehostet wird.
Dark Star1

Und wenn IPv6 deaktiviert ist? Hier ist eine Anleitung für Ubuntu 11.10: pario.no/2011/12/09/disable-ipv6-on-ubuntu-11-10
Henk


0

Zusammen mit der anderen Antwort mit setenv.sh und CATALINA_OPTS ...

Wenn ich Tomcat SSL mit APR verwende, kann ich Tomcat nur dazu bringen, sich an ipv4 zu binden, indem ich Folgendes zur Connector-Konfiguration hinzufüge:

address="0.0.0.0"

server.xml sieht so aus:

<Connector port="8443" protocol="org.apache.coyote.http11.Http11AprProtocol"
               maxThreads="150"
               SSLEnabled="true"
               scheme="https"
               compression="off"
               connectionTimeout="1190"
               address="0.0.0.0"
               >

-2

Debian 8 navigieren Sie zu Ihrem Lieblingseditor unter / etc / default / grub ; Suchen Sie nach dem Abschnitt GRUB_CMDLINE_LINUX_DEFAULT = "quiet" **, und fügen Sie dann ipv6.disable = 1 hinzu (siehe unten)

GRUB_CMDLINE_LINUX_DEFAULT = "ipv6.disable = 1 leise"

Speichern und schließen. Verwenden Sie im selben Verzeichnis Ihren bevorzugten Editor unter / etc / default / tomcat8 und suchen Sie dann nach dem Abschnitt mit JAVA_OPTS =, der auskommentiert wird. Fügen Sie unter dieser Zeile Folgendes hinzu. JAVA_OPTS = "$ JAVA_OPTS -Djava.net.preferIPv4Stack = true -Djava.net.preferIPv4Addresses = true"

Speichern und schließen

Geben Sie an der Eingabeaufforderung update-grub ein . Wenn Sie sudo mit sudo verwenden, starten Sie den tomcat8- Dienst neu. Tomcat8 restart

Sie sollten jetzt auf IPv4 sein.

Bitte geben Sie in zukünftigen Beiträgen vollständige Pfade und Dateinamen an. Danke dir

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.