Як можна змусити tomcat прив’язати до ipv4 адреси?


32

Нещодавно я встановив tomcat за допомогою інсталяційного сценарію від спільноти apache solr typo3 і провів останні 3 дні, намагаючись з’ясувати, чому це не буде працювати, поки випадково не помітив, що коли я запитав процес прослуховування порту через "lsof -i ", він був прив'язаний до протоколу ipv6. Я гугл скрізь, і більшість з них говорять, що встановлення адреси 0,0.0,0 у з'єднувачі tomcat вирішує цю проблему, інші кажуть, що встановити JAVA_OPTS = "- Djava.net.preferIPv4Stack = вірно" ; Я спробував перший, який не працює, але останній я не знаю, де його поставити. Одне рішення, яке я десь прочитав, запропонувало помістити його в setenv.shале я не можу знайти цей файл у моїй установці tomcat. Я вдячний на будь-яку допомогу на даний момент з цього приводу. Версія tomcat - 6.x, а ОС - ubuntu 11.10. Спасибі


1
Які ips / порти прослуховується через lsof -i?
ставав також

@becomingwisest 8080.
Темна зірка1

Ви маєте рацію - файл setenv.sh не існує у вікні. Вам потрібно створити файл setenv.sh у каталозі бін CATALINA_BASE або CATALINA_HOME. Сценарії запуску перевіряють, чи ви створили файл, чи створили файл налаштування (setenv.sh) - скрипт запуску викликає його, інакше просто ігнорує і рухається далі.
nevenc

Відповіді:


28

Багато хто запропонував оновити catalina.shсценарій запуску. Так, це рішення спрацювало б, але catalina.shсценарій не призначений для налаштування / оновлення. Усі зміни повинні замість цього перейти в сценарій налаштування, тобто setenv.sh.

ПРИМІТКА: TOMCAT_HOME/bin/setenv.shза замовчуванням не існує, його потрібно створити. Перевірте catalina.shсценарій, і ви побачите, що сценарій запуску перевіряє, чи setenv.shіснує, і виконує, якщо він є.

Отже, я пропоную вам створити новий TOMCAT_HOME/bin/setenv.shсценарій одним рядком:

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

3
Я б також використовував CATALINA_OPTS замість JAVA_OPTS, особливо якщо у вас є інші варіанти JVM, які ви хочете перейти в JVM при запуску Tomcat. Якщо ви використовуєте JAVA_OPTS, ті самі параметри будуть передані у відключення Tomcat, ймовірно, не те, що ви хотіли б / очікували. Використовуйте натомість CATALINA_OPTS :)
nevenc

Я вибираю це як відповідь зараз, оскільки більшість людей, які мають цю проблему сьогодні, швидше за все, використовують нову версію Tomcat.
Темна зірка1

27

Добре, я нарешті вирішив це. Мене наказали спробувати це і рішення Хенка. Жоден з яких, здавалося, не працював з віддаленим віртуальним сервером. Я здогадуюсь про те, що оскільки я перебуваю на спільному просторі ядра, то провайдер запобігає цьому. У будь-якому випадку я додав: JAVA_OPTS= $JAVA_OPTS -Djava.net.preferIPv4Stack=true -Djava.net.preferIPv4Addressesдо сценарію запуску catalina.sh і, здавалося, виправили проблему прив’язки tomcat до ipv6.


3
Отже, ви на VPS із спільним ядром ... D'oh!
Хенк

Здається, це більше не працює з tomcat 8.
Ortomala Lokni

1
У програмі tomcat 8 ця опція не працювала для мене, але відповідь Невенка справді спрацювала.
Edenshaw

4

Правильним синтаксисом для зміни catalina.sh буде:

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

3

Якщо ви використовували цей інсталятор: " Apache Solr для TYPO3 ", ви можете змінити адресу у файлі server.xml. За замовчуванням вказується localhost, тому шукайте 127.0.0.1 та змініть його на потрібну IPv4-адресу. Не забудьте перезапустити Tomcat6, щоб зміни набрали чинності.

ОНОВЛЕННЯ, 20120521

Дивіться мій коментар нижче про те, як відключити IPv6 на Ubuntu 11.10.

Я успішно перевірив це на Virtualbox-VM на своєму Mac. Адреса для порту 8080 роз'єму змінено з 127.0.0.1 на 0.0.0.0 дюйма server.xml.

Тоді відключення IPv6 змушує "tcp6" піти, тому він прив'язується до адреси, призначеної лише для IPv4.

До / з увімкненим IPv6:

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

Після / IPv6 вимкнено:

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

Спробувавши це, і що не спрацювало netstat, показує, що незважаючи на те, що процес пов'язаний з адресою ipv4, він все ще шукає ipv6 a la це повернення: tcp6 0 0 XXXX: 8080 ::: * LISTEN. що мені здається дивним, але проблема також була повторена на vm мого друга, який розміщений на Mac.
Темна зірка1

А коли IPv6 відключений? Ось хауто
Henk


0

Поряд з іншою відповіддю за допомогою setenv.sh та CATALINA_OPTS ...

Використовуючи Tomcat SSL з APR, єдиний спосіб, коли я міг би змусити Tomcat прив’язатись до ipv4, був додати це до конфігурації роз'єму:

address="0.0.0.0"

server.xml виглядає так:

<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 перейдіть до використання улюбленого редактора на / etc / default / grub ; шукайте розділ GRUB_CMDLINE_LINUX_DEFAULT = "тихий" **, а потім додайте ipv6.disable = 1 , як показано нижче

GRUB_CMDLINE_LINUX_DEFAULT = "ipv6.disable = 1 тиша"

Збережіть і вийдіть. У тому самому каталозі використовуйте улюблений редактор на / etc / default / tomcat8, тоді шукайте розділ з JAVA_OPTS = який буде прокоментовано, додайте наступне нижче цього рядка. JAVA_OPTS = "$ JAVA_OPTS -Djava.net.preferIPv4Stack = true -Djava.net.preferIPv4Addresses = true"

Збережіть і вийдіть

У командному рядку введіть update-grub , якщо ви використовуєте sudo з sudo, перезапустіть службу tomcat8 перезавантажити tomcat8

Ви повинні бути на IPv4 зараз.

Будь ласка, у майбутніх публікаціях включайте повні шляхи та назви файлів. Дякую тобі

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.