如何获得tomcat绑定到ipv4地址?


32

我最近通过apache solr typo3社区的安装脚本安装了tomcat,并花了最后三天的时间来弄清楚为什么它无法正常工作,直到偶然发现我通过“ lsof -i”查询了侦听端口的过程。 ”,它已绑定到ipv6协议。我到处都用Google搜索,大多数人说在tomcat连接器中将地址设置为0.0.0.0可以解决此问题,其他人则说将JAVA_OPTS =“-Djava.net.preferIPv4Stack = true”设置为 ; 我尝试了前一种方法,但该方法不起作用,但后者不确定在哪里放置。我在某处阅读的一种解决方案建议将其放在setenv.sh中但在我的tomcat安装中找不到此文件。在此方面,我将不胜感激。Tomcat的版本是6.x,操作系统是ubuntu 11.10。谢谢


1
它通过lsof -i监听什么ips /端口?
becomingwisest

@becomingwisest 8080
黑暗STAR1

您是正确的-setenv.sh文件不存在。您需要在CATALINA_BASE或CATALINA_HOME bin目录中创建setenv.sh文件。启动脚本检查是否创建了文件,是否创建了自定义(setenv.sh)文件-启动脚本将调用该文件,否则将忽略并继续。
nevenc

Answers:


28

许多建议更新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 "

3
我还将使用CATALINA_OPTS而不是JAVA_OPTS,尤其是如果您要在Tomcat启动时将其传递给JVM的其他JVM选项。如果使用JAVA_OPTS,则将相同的选项传递到Tomcat关闭中,可能不是您想要/期望的。请改用CATALINA_OPTS :)
nevenc

我现在选择这作为答案,因为今天大多数人都可能使用较新版本的tomcat。
黑暗之星

27

好的,我终于解决了。我被指示尝试此和Henk的解决方案。两者似乎都无法与远程虚拟服务器一起使用。我正在猜测一个事实,因为我在共享的内核空间中,所以提供程序阻止了这一点。无论如何,我JAVA_OPTS= $JAVA_OPTS -Djava.net.preferIPv4Stack=true -Djava.net.preferIPv4Addresses在catalina.sh启动脚本中添加了:并且似乎已经解决了将tomcat绑定到ipv6的问题。


3
因此,您正在使用具有共享内核的VPS。
亨克

这似乎不工作了与Tomcat的8
Ortomala Lokni

1
对于tomcat 8,此选项对我不起作用,但是nevenc的答案确实起作用。
Edenshaw'2

4

修改catalina.sh的正确语法为:

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

3

如果您使用以下安装程序:“ 用于TYPO3的Apache Solr ”,则可以更改文件中的地址server.xml。默认指向localhost,因此查找127.0.0.1并将其更改为所需的IPv4地址。不要忘记重启Tomcat6才能使更改生效。

更新,20120521

请参阅下面有关如何在Ubuntu 11.10上禁用IPv6的评论。

我已经在Mac上的Virtualbox-VM上成功测试了此功能。连接器端口8080的地址已从127.0.0.1更改为0.0.0.0 in 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

netstat显示,尽管该进程已绑定到ipv4地址,但它仍在寻找ipv6并返回以下内容:tcp6 0 0 XXXX:8080 ::: * LISTEN。我认为这很奇怪,但是这个问题也已经在我朋友的Mac主机上的vm中复制了。
黑暗之星2012年

以及何时禁用IPv6?这是Ubuntu 11.10的方法手册:pario.no/2011/12/09/disable-ipv6-on-ubuntu-11-10
Henk


0

连同使用setenv.sh和CATALINA_OPTS的其他答案...

使用带有APR的Tomcat SSL,我可以使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"
               >

-2

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 服务tomcat8 restart

您现在应该在IPv4上。

请在以后的帖子中提供完整的路径和文件名。谢谢

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.