Come si fa a tomcat legarsi all'indirizzo ipv4?


32

Di recente ho installato Tomcat tramite uno script di installazione della comunità apache solr typo3 e ho trascorso gli ultimi 3 giorni a cercare di capire perché non funzionasse fino a quando ho notato che quando ho interrogato il processo in ascolto sulla porta tramite "lsof -i ", era legato al protocollo ipv6. Ho cercato su Google ovunque e la maggior parte dice che l'impostazione dell'indirizzo su 0.0.0.0 nel connettore Tomcat risolve questo problema, altri dicono che l'impostazione JAVA_OPTS = "- Djava.net.preferIPv4Stack = true" ; Ho provato il primo che non funziona, ma il secondo non sono sicuro di dove metterlo. Una soluzione che ho letto da qualche parte mi ha suggerito di metterlo in setenv.shma non riesco a trovare questo file nella mia installazione di Tomcat. Gradirei qualsiasi aiuto al momento riguardo a questo. La versione tomcat è 6.xe il sistema operativo è ubuntu 11.10. Grazie


1
Su quali ips / porte è in ascolto, tramite lsof -i?
diventando più

@becomingwisest 8080.
Dark Star1

Hai ragione - il file setenv.sh non esiste fuori dalla scatola. Devi creare il file setenv.sh nella tua directory bin CATALINA_BASE o CATALINA_HOME. Gli script di avvio controllano se hai creato il file, se hai creato il file di personalizzazione (setenv.sh) - lo script di avvio lo chiama, altrimenti ignora e continua.
nevenc,

Risposte:


28

Molti hanno suggerito l'aggiornamento dello catalina.shscript di avvio. Sì, quella soluzione funzionerebbe, ma lo catalina.shscript non è pensato per essere personalizzato / aggiornato. Tutte le modifiche dovrebbero essere inserite nello script di personalizzazione, ad es setenv.sh.

NOTA: TOMCAT_HOME/bin/setenv.shnon esiste per impostazione predefinita, è necessario crearlo. Controlla lo catalina.shscript e vedrai che lo script di avvio controlla se setenv.shesiste, ed esegue se lo fa.

Quindi, ti suggerisco di creare un nuovo TOMCAT_HOME/bin/setenv.shscript con una sola riga:

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

3
Vorrei anche usare CATALINA_OPTS invece di JAVA_OPTS, specialmente se hai altre opzioni JVM che vuoi passare a JVM all'avvio di Tomcat. Se usi JAVA_OPTS, le stesse opzioni verranno passate allo spegnimento di Tomcat, probabilmente non quello che vorresti / ti aspetti. Usa invece CATALINA_OPTS :)
nevenc,

Sto scegliendo questa come risposta ora poiché la maggior parte delle persone che hanno questo problema oggi molto probabilmente userebbe una versione più recente di Tomcat.
Dark Star1

27

Ok l'ho finalmente risolto. Sono stato indirizzato a provare questa e la soluzione di Henk. Nessuno dei due sembrava funzionare con il server virtuale remoto. Sto indovinando il fatto che, poiché sono su uno spazio kernel condiviso, il provider lo impedisce. In ogni caso ho aggiunto: JAVA_OPTS= $JAVA_OPTS -Djava.net.preferIPv4Stack=true -Djava.net.preferIPv4Addressesallo script di avvio catalina.sh e questo sembra aver risolto il problema di associare tomcat a ipv6.


3
Quindi sei su un VPS con un kernel condiviso ... D'oh!
Henk,

Questo sembra non funzionare più con Tomcat 8.
Ortomala Lokni il

1
Con Tomcat 8, questa opzione non ha funzionato per me, ma la risposta di Nevenc ha funzionato.
Edenshaw,

4

La sintassi corretta per modificare catalina.sh sarebbe:

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

3

Se hai utilizzato questo programma di installazione: " Apache Solr per TYPO3 ", puoi modificare l'indirizzo nel file server.xml. Il valore predefinito punta a localhost, quindi cerca 127.0.0.1 e modificalo nell'indirizzo IPv4 che desideri. Non dimenticare di riavviare Tomcat6 per rendere effettive le modifiche.

AGGIORNAMENTO, 20120521

Vedi il mio commento qui sotto su come disabilitare IPv6 su Ubuntu 11.10.

Ho provato con successo questo su una Virtualbox-VM sul mio Mac. L'indirizzo per la porta del connettore 8080 è stato modificato da 127.0.0.1 a 0.0.0.0 pollici server.xml.

Quindi la disabilitazione di IPv6 fa scomparire "tcp6", quindi è associato a un indirizzo solo IPv4.

Prima / con IPv6 abilitato:

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

Dopo / IPv6 disabilitato:

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

Ho provato anche questo e che non ha funzionato netstat mostra che nonostante il processo sia associato a un indirizzo ipv4 sta ancora cercando un ipv6 a questo ritorno: tcp6 0 0 XXXX: 8080 ::: * ASCOLTA. che penso sia strano, ma il problema è stato replicato anche sulla VM del mio amico che è ospitata su un Mac.
Dark Star1

E quando IPv6 è disabilitato? Ecco un howto per Ubuntu 11.10: pario.no/2011/12/09/disable-ipv6-on-ubuntu-11-10
Henk


0

Insieme all'altra risposta usando setenv.sh e CATALINA_OPTS ...

Utilizzando Tomcat SSL con APR, l'unico modo in cui sono riuscito a far legare Tomcat a ipv4 è stato aggiungere questo alla configurazione del connettore:

address="0.0.0.0"

server.xml è simile al seguente:

<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 cerca di usare il tuo editor preferito su / etc / default / grub ; cerca la sezione GRUB_CMDLINE_LINUX_DEFAULT = "quiet" ** con quindi aggiungi ipv6.disable = 1 , come mostrato sotto

GRUB_CMDLINE_LINUX_DEFAULT = "ipv6.disable = 1 quiet"

Salva ed esci. Nella stessa directory usa il tuo editor preferito su / etc / default / tomcat8 quindi cerca la sezione con JAVA_OPTS = che sarà commentata, aggiungi quanto segue sotto quella riga. JAVA_OPTS = "$ JAVA_OPTS -Djava.net.preferIPv4Stack = true -Djava.net.preferIPv4Addresses = true"

Salva ed esci

Al prompt dei comandi digitare update-grub , se si utilizza sudo con sudo, quindi riavviare il servizio tomcat8 riavvio tomcat8

Ora dovresti essere su IPv4.

Si prega di includere nei post futuri percorsi completi e nomi file. Grazie

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.