W jaki sposób można powiązać tomcat z adresem IPv4?

32

Niedawno zainstalowałem tomcat za pomocą skryptu instalacyjnego ze społeczności Apache Solr Typo3 i spędziłem ostatnie 3 dni próbując dowiedzieć się, dlaczego to nie zadziała, dopóki przypadkiem nie zauważyłem, że kiedy zapytałem o proces nasłuchiwania na porcie za pomocą „lsof -i ”, był związany z protokołem ipv6. Wszędzie googlowałem i większość twierdzi, że ustawienie adresu na 0.0.0.0 w złączu tomcat rozwiązuje ten problem, inni twierdzą, że ustawienie JAVA_OPTS = "- Djava.net.preferIPv4Stack = true" ; Wypróbowałem ten pierwszy, który nie działa, ale ten drugi nie jestem pewien, gdzie go umieścić. Jedno rozwiązanie, które gdzieś przeczytałem, sugeruje umieszczenie go w setenv.shale nie mogę znaleźć tego pliku w mojej instalacji tomcat. Byłbym wdzięczny za wszelką pomoc w tej sprawie. Wersja tomcat to 6.x, a system operacyjny to Ubuntu 11.10. Dzięki

Dark Star1
źródło
1
Na jakich portach ips nasłuchuje przez lsof -i?
zostanie
@becomingwisest 8080.
Dark Star1
Masz rację - plik setenv.sh nie istnieje po wyjęciu z pudełka. Musisz utworzyć plik setenv.sh w katalogu bin CATALINA_BASE lub CATALINA_HOME. Skrypty startowe sprawdzają, czy utworzono plik, czy utworzono plik dostosowywania (setenv.sh) - skrypt startowy wywołuje go, w przeciwnym razie po prostu ignoruje i przechodzi do następnego kroku.
nevenc

Odpowiedzi:

28

Wiele osób sugerowało aktualizację catalina.shskryptu uruchamiania. Tak, to rozwiązanie działałoby, ale catalina.shskrypt nie ma być dostosowywany / aktualizowany. Wszystkie zmiany powinny zamiast tego przejść do skryptu dostosowywania, tj setenv.sh.

UWAGA: TOMCAT_HOME/bin/setenv.shdomyślnie nie istnieje, musisz go utworzyć. Sprawdź catalina.shskrypt, a zobaczysz, czy skrypt startowy sprawdza, czy setenv.shistnieje, i wykonuje, jeśli tak jest.

Sugeruję więc, aby utworzyć nowy TOMCAT_HOME/bin/setenv.shskrypt w jednym wierszu:

JAVA_OPTS="$JAVA_OPTS -Djava.net.preferIPv4Stack=true -Djava.net.preferIPv4Addresses=true "
Nevenc
źródło
3
Używałbym również CATALINA_OPTS zamiast JAVA_OPTS, szczególnie jeśli masz inne opcje JVM, które chcesz przekazać do JVM podczas uruchamiania Tomcat. Jeśli użyjesz JAVA_OPTS, te same opcje zostaną przekazane do zamykania Tomcat, prawdopodobnie nie to, czego byś chciał / oczekiwał. Zamiast tego użyj CATALINA_OPTS :)
nevenc
Wybieram to jako odpowiedź teraz, ponieważ większość osób mających dzisiaj ten problem najprawdopodobniej użyłaby nowszej wersji tomcat.
Dark Star1
27

Ok, w końcu to rozwiązałem. Polecono mi spróbować tego i rozwiązania Henka. Żaden z nich nie działał na zdalnym serwerze wirtualnym. Zgaduję, że ponieważ jestem na wspólnej przestrzeni jądra, więc dostawca temu zapobiega. W każdym razie dodałem: JAVA_OPTS= $JAVA_OPTS -Djava.net.preferIPv4Stack=true -Djava.net.preferIPv4Addressesdo skryptu startowego catalina.sh i wydawało się, że to rozwiązało problem wiązania tomcat z ipv6.

Dark Star1
źródło
3
Więc korzystasz z VPS ze wspólnym jądrem ... D'oh!
Henk
Wydaje się, że to już nie działa z tomcat 8.
Ortomala Lokni
1
W przypadku tomcat 8 ta opcja nie działała dla mnie, ale odpowiedź nevenc działała.
Edenshaw
4

Prawidłowa składnia do modyfikowania pliku catalina.sh to:

JAVA_OPTS=" $JAVA_OPTS -Djava.net.preferIPv4Stack=true -Djava.net.preferIPv4Addresses=true "
yglodt
źródło
3

Jeśli użyłeś tego instalatora: „ Apache Solr dla TYPO3 ”, możesz zmienić adres w pliku server.xml. Domyślnie wskazuje localhost, więc poszukaj 127.0.0.1 i zmień go na pożądany adres IPv4. Nie zapomnij zrestartować Tomcat6, aby zmiany odniosły skutek.

AKTUALIZACJA, 20120521

Zobacz mój komentarz poniżej, jak wyłączyć IPv6 na Ubuntu 11.10.

Z powodzeniem przetestowałem to na Virtualbox-VM na moim komputerze Mac. Adres portu 8080 złącza został zmieniony z 127.0.0.1 na 0.0.0.0 in server.xml.

Następnie wyłączenie IPv6 powoduje, że „tcp6” odchodzi, więc jest on powiązany z adresem tylko dla IPv4.

Przed / z włączonym IPv6:

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

Po wyłączeniu / IPv6:

# netstat -anp | grep 8080   
tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      2045/java
Henk
źródło
Próbowałem tego również i to nie działało. Netstat pokazuje, że pomimo procesu powiązania z adresem ipv4, wciąż szuka ipv6 a la ten powrót: tcp6 0 0 XXXX: 8080 ::: * LISTEN. co wydaje mi się dziwne, ale problem został również zreplikowany na vm mojego przyjaciela, który jest hostowany na komputerze Mac.
Dark Star 1
A kiedy IPv6 jest wyłączony? Oto instrukcja
Henk
0

Wraz z inną odpowiedzią przy użyciu setenv.sh i CATALINA_OPTS ...

Używając Tomcat SSL z APR, jedynym sposobem, w jaki mogłem zmusić Tomcat do powiązania z ipv4, było dodanie tego do konfiguracji konektora:

address="0.0.0.0"

server.xml wygląda następująco:

<Connector port="8443" protocol="org.apache.coyote.http11.Http11AprProtocol"
               maxThreads="150"
               SSLEnabled="true"
               scheme="https"
               compression="off"
               connectionTimeout="1190"
               address="0.0.0.0"
               >
dzień dzisiejszy
źródło
-2

Debian 8 przejdź do korzystania ze swojego ulubionego edytora na / etc / default / grub ; poszukaj sekcji GRUB_CMDLINE_LINUX_DEFAULT = „cichy” **, a następnie dodaj ipv6.disable = 1 , jak pokazano poniżej

GRUB_CMDLINE_LINUX_DEFAULT = "ipv6.disable = 1 cicha"

Zapisz i wyjdź. W tym samym katalogu użyj swojego ulubionego edytora na / etc / default / tomcat8, a następnie poszukaj sekcji z JAVA_OPTS =, która zostanie skomentowana, dodaj poniższy wiersz. JAVA_OPTS = "$ JAVA_OPTS -Djava.net.preferIPv4Stack = true -Djava.net.preferIPv4Addresses = true"

Zapisz i wyjdź

W wierszu polecenia wpisz update-grub , jeśli używasz sudo z sudo, uruchom ponownie usługę tomcat8, ponownie uruchom tomcat8

Powinieneś być teraz na IPv4.

W przyszłych postach proszę podać pełne ścieżki i nazwy plików. Dziękuję Ci

Security Centric Inc.
źródło