我在一台 Suse Linux 机器上有两个不同的服务器(即端口 8082 上的 tomcat 和端口 9080 上的 jboss)。第一个服务器是前段时间安装的,第二个服务器是最近才安装的。现在我无法从另一台机器访问第二个服务器。
如果我查看 netstat 输出,会发现一个区别:
user@server:/etc> netstat -l -n|grep 8082
tcp 0 0 :::8082 :::* LISTEN
ser@server:/etc> netstat -l -n|grep 9080
tcp 0 0 127.0.0.1:9080 0.0.0.0:* LISTEN
看来 9080 服务器被限制为 127.0.0.1,而第一个服务器有 :::。
更新:
我将 standalone.xml 配置文件从
<interface name="public">
<inet-address value="127.0.0.1"/>
</interface>
到
<interface name="public">
<any-address />
</interface>
但是当我调用 netstat 时仍然存在差异,并且仍然无法从远程连接到服务器:
netstat -l -n |grep 9080
tcp 0 0 0.0.0.0:9080 0.0.0.0:* LISTEN
这种差异源于何处,这种差异的语义是什么?
答案1
JBoss 4.2 及更高版本默认仅监听本地主机,您需要将 -b 0.0.0.0 添加到 run.sh 启动器(初始化脚本等)以使其监听所有可用接口。
答案2
在我工作的地方,我们像这样配置我们的 JBoss AS 7:
<interface name="management">
<inet-address value="..."/>
</interface>
<interface name="public">
<inet-address value="..."/>
</interface>
其中 '...' 是安装 JBoss AS 7 的机器的实际 IP 或主机名。到目前为止运行正常,没有问题 - 您的问题到底出在哪里?
答案3
如果它对您不起作用,请尝试检查 iptables。(sudo iptables -F
暂时删除所有规则,以便您可以检查 iptables 是否阻止您的通信)。
检查 JBoss 是否正在监听:sudo netstat -tlnp
列出 iptables 规则:sudo iptables -L -n
答案4
也许你的套接字绑定到了 IPv6,请尝试使用 any-ipv4-address 元素
<interfaces>
<interface name="management">
<inet-address value="127.0.0.1"/>
</interface>
<interface name="public">
<inet-address value="127.0.0.1"/>
</interface>
<!-- IPv4 -->
<interface name="any">
<any-ipv4-address/>
</interface>
</interfaces>
您也可以尝试使用any
套接字绑定组中的接口
<socket-binding-group name="standard-sockets" default-interface="any">