Как заставить tomcat связываться с IPv4-адресом?
Я недавно установил 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. Спасибо
7 ответов
Многие предложили обновить 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 "
Хорошо, я наконец решил это. Я был направлен попробовать это и решение Хенка. Ни один из которых, казалось, не работал с удаленным виртуальным сервером. Я предполагаю тот факт, что, поскольку я нахожусь в общем пространстве ядра, провайдер предотвращает это. В любом случае я добавил: JAVA_OPTS= $JAVA_OPTS -Djava.net.preferIPv4Stack=true -Djava.net.preferIPv4Addresses
к сценарию запуска catalina.sh, и это, похоже, решило проблему привязки tomcat к ipv6.
Правильный синтаксис для изменения catalina.sh будет:
JAVA_OPTS=" $JAVA_OPTS -Djava.net.preferIPv4Stack=true -Djava.net.preferIPv4Addresses=true "
Если вы использовали этот установщик: " 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
Вместе с другим ответом, используя 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"
>
Хотя, вероятно, это не самый предпочтительный метод, я заметил, что отключение IPv6 на уровне ядра убедит Tomcat открыть привязку IPv4.
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 сейчас.
Пожалуйста, в будущих сообщениях укажите полные пути и имена файлов. Благодарю вас