Comment faire pour que Tomcat se lie à l'adresse IPv4?

32

J'ai récemment installé tomcat via un script d'installation de la communauté apache solr typo3 et j'ai passé les 3 derniers jours à essayer de comprendre pourquoi cela ne fonctionnerait pas jusqu'à ce que je remarque par hasard que lorsque j'ai interrogé le processus en écoutant sur le port via "lsof -i ", il était lié au protocole ipv6. J'ai googlé partout et la plupart disent que la définition de l'adresse à 0.0.0.0 dans le connecteur tomcat résout ce problème, d'autres disent que la définition de JAVA_OPTS = "- Djava.net.preferIPv4Stack = true" ; J'ai essayé le premier qui ne fonctionne pas mais le second je ne sais pas où le mettre. Une solution que j'ai lue quelque part a suggéré de la mettre dans setenv.shmais je ne trouve pas ce fichier dans mon installation tomcat. J'apprécierais pour le moment toute aide à ce sujet. La version tomcat est 6.x et le système d'exploitation est ubuntu 11.10. Merci

Dark Star1
la source
1
Sur quels ports / ips écoute-t-il via lsof -i?
devenant
@becomingwisest 8080.
Dark Star1
Vous avez raison - le fichier setenv.sh n'existe pas hors de la boîte. Vous devez créer le fichier setenv.sh dans votre répertoire bin CATALINA_BASE ou CATALINA_HOME. Les scripts de démarrage vérifient si vous avez créé le fichier, si vous avez créé un fichier de personnalisation (setenv.sh) - le script de démarrage l'appelle, sinon il l'ignore et continue.
Nevenc

Réponses:

28

Beaucoup ont suggéré de mettre à jour catalina.shle script de démarrage. Oui, cette solution fonctionnerait, mais le catalina.shscript n'est pas destiné à être personnalisé / mis à jour. Toutes les modifications doivent plutôt entrer dans le script de personnalisation, c'est-à-dire setenv.sh.

REMARQUE: TOMCAT_HOME/bin/setenv.shn'existe pas par défaut, vous devez le créer. Vérifiez le catalina.shscript et vous verrez le script de démarrage vérifier s'il setenv.shexiste et s'exécute si tel est le cas.

Donc, je vous suggère de créer un nouveau TOMCAT_HOME/bin/setenv.shscript avec une seule ligne:

JAVA_OPTS="$JAVA_OPTS -Djava.net.preferIPv4Stack=true -Djava.net.preferIPv4Addresses=true "
Nevenc
la source
3
J'utiliserais également CATALINA_OPTS au lieu de JAVA_OPTS, surtout si vous avez d'autres options JVM que vous souhaitez passer à JVM au démarrage de Tomcat. Si vous utilisez JAVA_OPTS, les mêmes options seront transmises à l'arrêt de Tomcat, probablement pas ce que vous souhaitez / attendez. Utilisez plutôt CATALINA_OPTS :)
Nevenc
Je choisis cela comme réponse maintenant, car la plupart des personnes rencontrant ce problème aujourd'hui utiliseront probablement une version plus récente de tomcat.
Dark Star1
27

Ok je l'ai finalement résolu. On m'a demandé d' essayer ceci et la solution de Henk. Aucun des deux ne semblait fonctionner avec le serveur virtuel distant. Je suppose que parce que je suis sur un espace de noyau partagé, le fournisseur empêche cela. Dans tous les cas, j'ai ajouté: JAVA_OPTS= $JAVA_OPTS -Djava.net.preferIPv4Stack=true -Djava.net.preferIPv4Addressesau script de démarrage catalina.sh et cela semblait avoir résolu le problème de la liaison de tomcat à ipv6.

Dark Star1
la source
3
Vous êtes donc sur un VPS avec un noyau partagé ... D'oh!
Henk
Cela ne semble plus fonctionner avec tomcat 8.
Ortomala Lokni
1
Avec tomcat 8, cette option ne fonctionnait pas pour moi, mais la réponse de Nevenc a fonctionné.
Edenshaw
4

La syntaxe correcte pour modifier catalina.sh serait:

JAVA_OPTS=" $JAVA_OPTS -Djava.net.preferIPv4Stack=true -Djava.net.preferIPv4Addresses=true "
yglodt
la source
3

Si vous avez utilisé ce programme d'installation: " Apache Solr pour TYPO3 ", vous pouvez modifier l'adresse dans le fichier server.xml. La valeur par défaut pointe vers localhost, alors recherchez 127.0.0.1 et changez-le en l'adresse IPv4 que vous souhaitez. N'oubliez pas de redémarrer Tomcat6 pour que les modifications prennent effet.

MISE À JOUR, 20120521

Voir mon commentaire ci-dessous sur la façon de désactiver IPv6 sur Ubuntu 11.10.

J'ai testé cela avec succès sur une Virtualbox-VM sur mon Mac. L'adresse du port de connecteur 8080 est passée de 127.0.0.1 à 0.0.0.0 in server.xml.

Ensuite, la désactivation d'IPv6 fait disparaître le "tcp6", il est donc lié à une adresse IPv4 uniquement.

Avant / avec IPv6 activé:

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

Après / IPv6 désactivé:

# netstat -anp | grep 8080   
tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      2045/java
Henk
la source
J'ai également essayé cela et cela n'a pas fonctionné. Netstat montre que malgré le processus lié à une adresse ipv4, il recherche toujours un ipv6 à la page suivante: tcp6 0 0 XXXX: 8080 ::: * LISTEN. ce qui je pense est étrange mais le problème a également été reproduit sur le vm de mon ami qui est hébergé sur un mac.
Dark Star1
Et quand IPv6 est désactivé? Voici un guide pour Ubuntu 11.10: pario.no/2011/12/09/disable-ipv6-on-ubuntu-11-10
Henk
0

Avec l'autre réponse en utilisant setenv.sh et CATALINA_OPTS ...

En utilisant Tomcat SSL avec APR, la seule façon de faire en sorte que Tomcat se lie à ipv4 était d'ajouter ceci à la configuration du connecteur:

address="0.0.0.0"

server.xml ressemble à ceci:

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

Debian 8 navigue pour utiliser votre éditeur préféré sur / etc / default / grub ; recherchez la section GRUB_CMDLINE_LINUX_DEFAULT = "quiet" ** avec puis ajoutez ipv6.disable = 1 , comme indiqué ci-dessous

GRUB_CMDLINE_LINUX_DEFAULT = "ipv6.disable = 1 silencieux"

Sauvegarder et quitter. Dans le même répertoire, utilisez votre éditeur préféré sur / etc / default / tomcat8 puis recherchez la section avec JAVA_OPTS = qui sera commentée, ajoutez ce qui suit sous cette ligne. JAVA_OPTS = "$ JAVA_OPTS -Djava.net.preferIPv4Stack = true -Djava.net.preferIPv4Addresses = true"

Sauvegarder et quitter

À l'invite de commandes, tapez update-grub , si vous utilisez sudo avec sudo, redémarrez le service tomcat8 tomcat8 restart

Vous devriez maintenant être sur IPv4.

Veuillez, dans les prochains articles, inclure les chemins d'accès complets et les noms de fichiers. Je vous remercie

Security Centric Inc.
la source