我安装 CentOS 6.5,选择“Web 服务器”包,其他一切都保持默认。
我先执行service tomcat6 start
,然后执行 ,ss -ntlp
以确认 Tomcat 正在监听端口 8080,如默认 Tomcat 6 /etc/tomcat6/server.xml 中指定的那样。这是输出:
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 :::111 :::* users:(("rpcbind",1012,11))
LISTEN 0 128 *:111 *:* users:(("rpcbind",1012,8))
LISTEN 0 100 :::8080 :::* users:(("java",1561,37))
LISTEN 0 128 :::22 :::* users:(("sshd",1216,4))
LISTEN 0 128 *:22 *:* users:(("sshd",1216,3))
LISTEN 0 128 127.0.0.1:631 *:* users:(("cupsd",1102,7))
LISTEN 0 128 ::1:631 :::* users:(("cupsd",1102,6))
LISTEN 0 100 ::1:25 :::* users:(("master",1292,13))
LISTEN 0 100 127.0.0.1:25 *:* users:(("master",1292,12))
LISTEN 0 128 :::33081 :::* users:(("rpc.statd",1030,11))
LISTEN 0 128 *:33657 *:* users:(("rpc.statd",1030,9))
LISTEN 0 1 ::ffff:127.0.0.1:8005 :::* users:(("java",1561,39))
LISTEN 0 50 :::8009 :::* users:(("java",1561,38))
这是否意味着 Tomcat 只监听 IPv6,而不是同时监听 IPv6 和 IPv4?为什么它不能“开箱即用”地正常工作?
答案1
这取决于 sysctl 的值net.ipv6.bindv6only
。
如果将其设置为 0,则 IPv6 INADDR6_ANY 地址 ( ::
) 上的侦听器将同时侦听 IPv6 和 IPv4 连接,除非应用程序本身也在套接字上设置了 IPV6_V6ONLY。
如果将其设置为 1,则此类监听器将仅监听 IPv6 连接。
# sysctl net.ipv6.bindv6only
net.ipv6.bindv6only = 0
测试应用程序是否正在监听 IPv4 应该很简单......
telnet 127.0.0.1 8080