Como obter o tomcat para vincular ao endereço ipv4?

32

Eu instalei recentemente o tomcat por meio de um script de instalação da comunidade apache solr typo3 e passei os últimos 3 dias tentando descobrir por que ele não funcionaria até que por acaso notei que quando consultei o processo ouvindo na porta via "lsof -i ", foi vinculado ao protocolo ipv6. Pesquisei em todos os lugares e a maioria diz que definir o endereço para 0.0.0.0 no conector do tomcat resolve esse problema; outros dizem que a configuração JAVA_OPTS = "- Djava.net.preferIPv4Stack = true" ; Eu tentei o primeiro que não funciona, mas o último não tenho certeza de onde colocá-lo. Uma solução que li em algum lugar sugeriu colocá-lo em setenv.shmas não consigo encontrar esse arquivo na minha instalação do tomcat. Gostaria de receber qualquer ajuda no momento em relação a isso. A versão do tomcat é 6.xe o sistema operacional é o ubuntu 11.10. obrigado

Dark Star1
fonte
11
Em que ips / portas está ouvindo, via lsof -i?
tornando
@becomingwisest 8080.
Dark Star1
Você está correto - o arquivo setenv.sh não existe fora da caixa. Você precisa criar o arquivo setenv.sh no diretório bin CATALINA_BASE ou CATALINA_HOME. Os scripts de inicialização verificam se você criou o arquivo, se você criou o arquivo de personalização (setenv.sh) - o script de inicialização o chama, caso contrário, apenas ignora e segue em frente.
Nevenc

Respostas:

28

Muitos sugeriram a atualização do catalina.shscript de inicialização. Sim, essa solução funcionaria, mas o catalina.shscript não deve ser personalizado / atualizado. Todas as alterações devem ir para o script de personalização, ou seja setenv.sh.

NOTA: TOMCAT_HOME/bin/setenv.shnão existe por padrão, você precisa criá-lo. Verifique o catalina.shscript e você verá que o script de inicialização verifica se setenv.shexiste e é executado, se existir.

Então, sugiro que você crie um novo TOMCAT_HOME/bin/setenv.shscript com uma única linha:

JAVA_OPTS="$JAVA_OPTS -Djava.net.preferIPv4Stack=true -Djava.net.preferIPv4Addresses=true "
nevenc
fonte
3
Eu também usaria CATALINA_OPTS em vez de JAVA_OPTS, especialmente se você tiver outras opções da JVM que deseja passar para a JVM na inicialização do Tomcat. Se você usar JAVA_OPTS, as mesmas opções serão passadas para o desligamento do Tomcat, provavelmente não o que você deseja / espera. Use CATALINA_OPTS vez :)
nevenc
Estou escolhendo esta como a resposta agora, já que a maioria das pessoas com esse problema hoje provavelmente usaria uma versão mais recente do tomcat.
Escuro Star1
27

Ok, finalmente resolvi. Fui orientado a tentar isso e a solução de Henk. Nenhum dos dois parecia funcionar com o servidor virtual remoto. Estou adivinhando o fato de que, como estou em um espaço compartilhado no kernel, o provedor evita isso. De qualquer forma, adicionei: JAVA_OPTS= $JAVA_OPTS -Djava.net.preferIPv4Stack=true -Djava.net.preferIPv4Addressesao script de inicialização catalina.sh e isso parecia ter corrigido o problema de vincular o tomcat ao ipv6.

Dark Star1
fonte
3
Então você está em um VPS com um kernel compartilhado ... D'oh!
Henk 21/05
Isso não parece funcionar mais com tomcat 8.
Ortomala Lokni
11
Com o tomcat 8, essa opção não funcionou para mim, mas a resposta de nevenc funcionou.
Edenshaw #
4

A sintaxe correta para modificar catalina.sh seria:

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

Se você usou este instalador: " Apache Solr for TYPO3 ", poderá alterar o endereço no arquivo server.xml. O padrão aponta para localhost, então procure por 127.0.0.1 e altere-o para o endereço IPv4 desejado. Não se esqueça de reiniciar o Tomcat6 para que as alterações entrem em vigor.

UPDATE, 20120521

Veja meu comentário abaixo sobre como desativar o IPv6 no Ubuntu 11.10.

Testei isso com êxito em uma VM Virtualbox no meu Mac. O endereço da porta do conector 8080 foi alterado de 127.0.0.1 para 0.0.0.0 in server.xml.

A desativação do IPv6 faz com que o "tcp6" desapareça, por isso é vinculado a um endereço somente IPv4.

Antes / com o IPv6 ativado:

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

Após / IPv6 desativado:

# netstat -anp | grep 8080   
tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      2045/java
Henk
fonte
Tentei isso também e não funcionou O netstat mostra que, apesar do processo estar vinculado a um endereço ipv4, ele ainda está procurando um ipv6 a la nesse retorno: tcp6 0 0 XXXX: 8080 ::: * LISTEN. o que acho estranho, mas o problema também foi replicado na VM do meu amigo, hospedada em um Mac.
Escuro Star1
E quando o IPv6 está desativado? Aqui é um howto para o Ubuntu 11.10: pario.no/2011/12/09/disable-ipv6-on-ubuntu-11-10
Henk
0

Juntamente com a outra resposta usando setenv.sh e CATALINA_OPTS ...

Usando o Tomcat SSL com APR, a única maneira de conseguir que o Tomcat se ligasse ao ipv4 era adicioná-lo à configuração do conector:

address="0.0.0.0"

server.xml fica assim:

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

O Debian 8 navegue para usar seu editor favorito em / etc / default / grub ; procure a seção GRUB_CMDLINE_LINUX_DEFAULT = "quiet" ** e adicione ipv6.disable = 1 , como visto abaixo

GRUB_CMDLINE_LINUX_DEFAULT = "ipv6.disable = 1 silencioso"

Salvar e sair. No mesmo diretório, use seu editor favorito em / etc / default / tomcat8 e procure a seção JAVA_OPTS = que será comentada, adicione o seguinte abaixo dessa linha. JAVA_OPTS = "$ JAVA_OPTS -Djava.net.preferIPv4Stack = true -Djava.net.preferIPv4Addresses = true"

Salvar e sair

No prompt de comando, digite update-grub , se você tiver sudo use com sudo, reinicie o serviço tomcat8 tomcat8 restart

Você deve estar no IPv4 agora.

Em postagens futuras, inclua caminhos completos e nomes de arquivos. Obrigado

Security Centric Inc.
fonte