¿Cómo se consigue que Tomcat se una a la dirección IPv4?

32

Recientemente instalé tomcat a través de un script de instalación de la comunidad apache solr typo3 y pasé los últimos 3 días tratando de descubrir por qué no funcionará hasta que por casualidad me di cuenta de que cuando pregunté el proceso escuchando en el puerto a través de "lsof -i ", estaba vinculado al protocolo ipv6. He buscado en Google en todas partes y la mayoría dice que establecer la dirección a 0.0.0.0 en el conector tomcat resuelve este problema, otros dicen que configurar JAVA_OPTS = "- Djava.net.preferIPv4Stack = true" ; He intentado lo primero que no funciona, pero lo último no estoy seguro de dónde ponerlo. Una solución que leí en alguna parte sugirió ponerlo en setenv.shpero no puedo encontrar este archivo en mi instalación de tomcat. Agradecería cualquier ayuda en este momento con respecto a esto. La versión de tomcat es 6.xy el sistema operativo es ubuntu 11.10. Gracias

Dark Star1
fuente
1
¿Qué ips / puertos está escuchando, a través de lsof -i?
ser más
@becomingwisest 8080.
Dark Star1
Tiene razón: el archivo setenv.sh no existe fuera de la caja. Debe crear el archivo setenv.sh en su directorio bin CATALINA_BASE o CATALINA_HOME. Las secuencias de comandos de inicio comprueban si creó el archivo, si creó el archivo de personalización (setenv.sh): la secuencia de comandos de inicio lo llama, de lo contrario simplemente ignora y continúa.
nevenc

Respuestas:

28

Muchos sugirieron actualizar el catalina.shscript de inicio. Sí, esa solución funcionaría, pero el catalina.shscript no debe ser personalizado / actualizado. Todos los cambios deberían ir al script de personalización, es decir setenv.sh.

NOTA: TOMCAT_HOME/bin/setenv.shno existe por defecto, debe crearlo. Verifique el catalina.shscript y verá que el script de inicio verifica si setenv.shexiste y se ejecuta si es así.

Por lo tanto, le sugiero que cree un nuevo TOMCAT_HOME/bin/setenv.shscript con una sola línea:

JAVA_OPTS="$JAVA_OPTS -Djava.net.preferIPv4Stack=true -Djava.net.preferIPv4Addresses=true "
nevenc
fuente
3
También usaría CATALINA_OPTS en lugar de JAVA_OPTS, especialmente si tiene otras opciones de JVM que desea pasar a JVM en el inicio de Tomcat. Si usa JAVA_OPTS, las mismas opciones se pasarán al apagado de Tomcat, probablemente no lo que desea / espera. Use CATALINA_OPTS en su lugar :)
nevenc
Estoy eligiendo esto como la respuesta ahora, ya que la mayoría de las personas que tienen este problema hoy probablemente usarían una versión más nueva de tomcat.
Dark Star1
27

Ok, finalmente lo resolví. Me ordenaron probar esto y la solución de Henk. Ninguno de los cuales parecía funcionar con el servidor virtual remoto. Supongo que porque estoy en un espacio de kernel compartido, el proveedor lo impide. En cualquier caso, agregué: JAVA_OPTS= $JAVA_OPTS -Djava.net.preferIPv4Stack=true -Djava.net.preferIPv4Addressesal script de inicio catalina.sh y parecía haber solucionado el problema de vincular tomcat a ipv6.

Dark Star1
fuente
3
Entonces estás en un VPS con un kernel compartido ... ¡Oh!
Henk
Parece que esto ya no funciona con
Tomcat
1
Con tomcat 8, esta opción no funcionó para mí, pero la respuesta de nevenc sí funcionó.
Edenshaw
4

La sintaxis correcta para modificar catalina.sh sería:

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

Si utilizó este instalador: " Apache Solr for TYPO3 ", puede cambiar la dirección en el archivo server.xml. El valor predeterminado apunta a localhost, así que busque 127.0.0.1 y cámbielo a la dirección IPv4 que desee. No olvide reiniciar Tomcat6 para que los cambios surtan efecto.

ACTUALIZACIÓN, 20120521

Vea mi comentario a continuación sobre cómo deshabilitar IPv6 en Ubuntu 11.10.

He probado con éxito esto en una Virtualbox-VM en mi Mac. La dirección para el puerto del conector 8080 ha cambiado de 127.0.0.1 a 0.0.0.0 in server.xml.

Luego, la desactivación de IPv6 hace que el "tcp6" desaparezca, por lo que está vinculado a una dirección solo de IPv4.

Antes / con IPv6 habilitado:

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

Después / IPv6 deshabilitado:

# netstat -anp | grep 8080   
tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      2045/java
Henk
fuente
Intenté esto también y eso no funcionó. Netstat muestra que, a pesar de que el proceso está vinculado a una dirección ipv4, todavía está buscando un ipv6 a la devolución: tcp6 0 0 XXXX: 8080 ::: * ESCUCHE. lo cual creo que es extraño, pero el problema también se ha replicado en la máquina virtual de mi amigo que está alojada en una Mac.
Dark Star1
¿Y cuando IPv6 está deshabilitado? Aquí hay un tutorial para Ubuntu 11.10: pario.no/2011/12/09/disable-ipv6-on-ubuntu-11-10
Henk
0

Junto con la otra respuesta usando setenv.sh y CATALINA_OPTS ...

Usando Tomcat SSL con APR, la única forma en que pude hacer que Tomcat se vincule a ipv4 fue agregar esto a la configuración del conector:

address="0.0.0.0"

server.xml tiene este aspecto:

<Connector port="8443" protocol="org.apache.coyote.http11.Http11AprProtocol"
               maxThreads="150"
               SSLEnabled="true"
               scheme="https"
               compression="off"
               connectionTimeout="1190"
               address="0.0.0.0"
               >
cómodo hoy
fuente
-2

Debian 8 navegue hasta usar su editor favorito en / etc / default / grub ; busque la sección GRUB_CMDLINE_LINUX_DEFAULT = "quiet" ** y luego agregue ipv6.disable = 1 , como se ve a continuación

GRUB_CMDLINE_LINUX_DEFAULT = "ipv6.disable = 1 silencioso"

Guardar y Salir. En el mismo directorio, use su editor favorito en / etc / default / tomcat8, luego busque la sección con JAVA_OPTS = que se comentará, agregue lo siguiente debajo de esa línea. JAVA_OPTS = "$ JAVA_OPTS -Djava.net.preferIPv4Stack = true -Djava.net.preferIPv4Addresses = true"

Guardar y Salir

En el símbolo del sistema, escriba update-grub , si tiene sudo use con sudo, reinicie el servicio tomcat8 restart tomcat8

Deberías estar en IPv4 ahora.

Por favor, en futuras publicaciones incluya rutas completas y nombres de archivos. Gracias

Security Centric Inc.
fuente