我最近通过 apache solr typo3 社区的安装脚本安装了 tomcat,并花了三天时间试图弄清楚为什么它不起作用,直到偶然发现,当我通过“ lsof -i
”查询监听端口的进程时,它绑定到了 ipv6 协议。
我在谷歌上搜索过,大多数人都说将地址设置为0.0.0.0
在 tomcat 连接器中解决了这个问题,其他人说设置JAVA_OPTS="-Djava.net.preferIPv4Stack=true"
。
我尝试过前者,但不起作用,但后者我不确定把它放在哪里。我读过的一个解决方案建议把它放在setenv.sh
但我在 tomcat 安装中找不到此文件。目前,如果能得到任何帮助,我将不胜感激。
tomcat版本是6.x,操作系统是ubuntu 11.10。
谢谢
答案1
许多人建议更新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 "
答案2
好的,我终于解决了。我被引导到尝试这个以及 Henk 的解决方案。这两种方法似乎都无法与远程虚拟服务器配合使用。我猜是因为我在共享内核空间中,所以提供商阻止了这种情况。无论如何,我添加了:JAVA_OPTS= $JAVA_OPTS -Djava.net.preferIPv4Stack=true -Djava.net.preferIPv4Addresses
到 catalina.sh 启动脚本,这似乎已经解决了将 tomcat 绑定到 ipv6 的问题。
答案3
修改 catalina.sh 的正确语法是:
JAVA_OPTS=" $JAVA_OPTS -Djava.net.preferIPv4Stack=true -Djava.net.preferIPv4Addresses=true "
答案4
虽然这可能不是首选方法,但我观察到在内核级别禁用 IPv6将说服 Tomcat 打开 IPv4 绑定。