Как заставить tomcat связываться с IPv4-адресом?

32

Я недавно установил tomcat через скрипт установки из сообщества apache solr typo3 и провел последние 3 дня, пытаясь выяснить, почему он не работает, пока случайно не заметил, что когда я запрашивал процесс, прослушивающий порт через "lsof -i ", это было связано с протоколом ipv6. Я везде гуглил, и большинство говорят, что установка адреса 0.0.0.0 в коннекторе tomcat решает эту проблему, другие говорят, что setting JAVA_OPTS = "- Djava.net.preferIPv4Stack = true" ; Я пробовал первый, который не работает, но последний я не уверен, где его поставить. Одно решение, которое я где-то читал, предложило поместить его в setenv.shно я не могу найти этот файл в моей установке Tomcat. Буду признателен за любую помощь на данный момент по этому поводу. Версия Tomcat - 6.x, а ОС - Ubuntu 11.10. Благодарность

Темная Звезда1
источник
1
Какие ips / порты он прослушивает через lsof -i?
становится
@becomingwisest 8080.
Dark Star1
Вы правы - файл setenv.sh не существует из коробки. Вам нужно создать файл setenv.sh в вашем каталоге bin 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 "
nevenc
источник
3
Я бы также использовал CATALINA_OPTS вместо JAVA_OPTS, особенно если у вас есть другие опции JVM, которые вы хотите передать в JVM при запуске Tomcat. Если вы используете JAVA_OPTS, те же параметры будут переданы в отключение Tomcat, вероятно, не то, что вы хотели бы / ожидаете. Вместо этого используйте CATALINA_OPTS :)
nevenc
Я выбрал это как ответ сейчас, так как большинство людей, имеющих эту проблему сегодня, скорее всего, будут использовать более новую версию Tomcat.
Dark Star1
27

Хорошо, я наконец решил это. Я был направлен попробовать это и решение Хенка. Ни один из которых, казалось, не работал с удаленным виртуальным сервером. Я предполагаю тот факт, что, поскольку я нахожусь в общем пространстве ядра, провайдер предотвращает это. В любом случае я добавил: JAVA_OPTS= $JAVA_OPTS -Djava.net.preferIPv4Stack=true -Djava.net.preferIPv4Addressesв сценарий запуска catalina.sh, и это, похоже, решило проблему привязки tomcat к ipv6.

Темная Звезда1
источник
3
Итак, вы используете VPS с общим ядром ...
Хенк
Кажется, это больше не работает с tomcat 8.
Ортомала Локни
1
С tomcat 8 эта опция у меня не сработала, но ответ Невена сработал.
Edenshaw
4

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

JAVA_OPTS=" $JAVA_OPTS -Djava.net.preferIPv4Stack=true -Djava.net.preferIPv4Addresses=true "
yglodt
источник
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 in 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
Henk
источник
Попробовал это тоже, и это не сработало. Netstat показывает, что, несмотря на то, что процесс связан с адресом ipv4, он все еще ищет ipv6 в виде этого возврата: tcp6 0 0 XXXX: 8080 ::: * LISTEN. что я считаю странным, но проблема также была воспроизведена на виртуальной машине моего друга, которая размещена на Mac.
Dark Star1
А когда IPv6 отключен? Вот инструкция для Ubuntu 11.10: pario.no/2011/12/09/disable-ipv6-on-ubuntu-11-10
Хенк
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"
               >
comfytoday
источник
-2

Debian 8 перейдите к использованию вашего любимого редактора в / etc / default / grub ; найдите раздел GRUB_CMDLINE_LINUX_DEFAULT = "quiet" **, а затем добавьте 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 service tomcat8 restart

Вы должны быть на IPv4 сейчас.

Пожалуйста, в будущих сообщениях укажите полные пути и имена файлов. Спасибо

Центр безопасности Inc.
источник