服务器能访问本机tomcat网站其他电脑却不行

服务器本机打开 http://localhost:8080 一切正常,服务访问换到隔壁工位那台电脑敲同样的器能其电地址,浏览器转圈转到超时。本机不行这种事儿我遇到过不下十次,网站每次都是服务访问同一个根因在作怪——Tomcat 默认只绑定了回环地址。

你打开 conf/server.xml,器能其电找到 <Connector> 那行,本机不行大概率看到的网站是这样:

<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />

注意,这里没有 address 属性。服务访问没有指定地址时,器能其电Tomcat 的本机不行行为取决于操作系统和 JVM 的实现,很多环境下它会监听 127.0.0.1 而不是网站 0.0.0.0。结果就是服务访问:本机通过 localhost 能通,因为走的器能其电是回环接口;其他电脑发来的请求到达网卡后,发现 8080 端口根本没在对外地址上监听,本机不行直接拒绝。

我在一台 CentOS 7 的测试机上验证过。本机 curl localhost:8080 返回 200,另一台机器 curl 192.168.1.50:8080 卡住直到超时。netstat -tlnp | grep 8080 的输出是 tcp 0 0 127.0.0.1:8080 0.0.0.0:* LISTEN。看到那个 127.0.0.1 了吗?这就是铁证。

改法很简单。在 Connector 标签里加上 address="0.0.0.0":

<Connector port="8080" protocol="HTTP/1.1" address="0.0.0.0" connectionTimeout="20000" redirectPort="8443" />

重启 Tomcat,再 netstat 看一眼,监听地址变成 0.0.0.0:8080 或者 :::8080,其他电脑就能访问了。

但别急着关页面。改完这个只解决了一半问题。防火墙还在那儿站着呢。

Windows 服务器上,Windows Defender 防火墙默认会弹窗问你是否允许 Java 进程通信。如果你当时点了“取消”,或者服务器是别人装的、压根没人点过那个弹窗,入站规则里就没有 8080 的放行条目。本机访问不经过防火墙过滤,所以感觉不到;外部请求一进来就被拦了。去“高级安全 Windows Defender 防火墙”里新建一条入站规则,放行 TCP 8080,或者直接关掉防火墙测试一下——测试完记得开回去。

Linux 这边更隐蔽。iptables 或 firewalld 可能默认只开了 22 和 80。CentOS 7 上 firewall-cmd --list-ports 一看,空的。firewall-cmd --add-port=8080/tcp --permanent 然后 firewall-cmd --reload,搞定。Ubuntu 用 ufw 的话,ufw allow 8080/tcp 就行。

还有一种情况:云服务器。安全组规则没开 8080,你在机器里怎么折腾都没用。阿里云、腾讯云、AWS 的控制台里找到安全组,添加一条入站规则,协议 TCP,端口 8080,源地址填 0.0.0.0/0(测试环境)或者你公司的出口 IP 段(生产环境别这么干)。

顺便说一个容易忽略的点。有些人改完 server.xml 重启,发现还是不行,急得团团转。检查一下是不是有多个 Connector 配置,或者 Tomcat 其实没重启成功——旧进程还占着 8080,新进程启动时报了“Address already in use”,日志里一闪而过你没注意。ps -ef | grep tomcat 确认一下,该 kill 的 kill 掉。

我个人的习惯是:遇到“本机能访问、外部不行”,按这个顺序排查——先看监听地址,再看本机防火墙,最后查云安全组。三步走完,95% 的情况都能解决。剩下 5% 可能是网络层面的问题,比如两台机器不在同一个 VLAN,或者中间有 ACL 策略,那就得找网管了。

对了,别用 localhost 去测外部访问。localhost 永远指向本机回环,你在别的电脑上敲 localhost 访问的是那台电脑自己,不是服务器。用服务器的实际 IP,比如 192.168.1.50:8080。这个低级错误我见过不止一个人犯。

时尚
上一篇:开源企业网站管理系统
下一篇:burpsuite打不开