(Plesk 10.4 centos 5.8 linux apache2 服务器,端口 8080 上装有 Tomcat5 和 Apache Solr)
我在请求 domain.com:8080 或 www.domain.com:8080 或 ip.ad.dr.ess:8080 时收到“连接已超时”
我能找到的所有理由都似乎不是这样的:
- Plesk 认为 Tomcat 运行良好并将其列为活动服务。
- 防火墙当前在端口 8080 上有一个接受所有规则。
- catalina tomcat 日志 (/var/log/tomcat5) 中没有任何相关信息 - 只有上次启动 tomcat 时的一些内容。根本没有失败请求的记录。
netstat -lnp | grep 8080
给出以下内容,我相信 意味着 Tomcat 正在监听来自任何 ip 和任何端口的所有 ip 地址上的 8080 端口的请求(如果我错了,请纠正我):
:
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 4018/java
这涵盖了我能找到的导致这次超时的所有原因 - 所以我一定是遗漏了一些基本的东西。
看起来 Tomcat 正在运行,监听正确的端口,获取合适的 IP 地址,没有受到防火墙的阻碍,并且在接收到请求后没有以日志记录的方式失败(所以我相信它不可能是内存不足或类似情况)。
我不知道该如何继续调试。我肯定忽略了一些显而易见的事情。有人能帮忙吗?
答案1
好吧,事实证明有防火墙,然后还有防火墙。
我天真地以为在 Parrallels/Plesk/VZ 防火墙 UI 中设置允许访问端口的规则就足以阻止防火墙阻止对该端口的访问。但我错了,这个 UI 并没有触及基于 iptables 的完全独立的防火墙层,该防火墙阻止了除选定 IP 之外的所有 IP 对 8080 的访问。
在我的 Plesk 设置中(可能特定于我的托管安排,我不确定)解决方案是添加/etc/firewall/include
如下规则:
$IPTABLES -I INPUT -p tcp --dport 8080 -s ip.ad.dr.ess -j ACCEPT
$IPTABLES -I OUTPUT -p tcp --sport 8080 -d ip.ad.dr.ess -j ACCEPT
...然后service firewall restart
(将 ip.ad.dr.ess 替换为您要列入白名单的 IP 地址)。我确信在大多数托管安排中,您可以直接使用/sbin/iptables
而不是 来运行这些行作为命令$IPTABLES
,但拥有自定义防火墙设置文件非常方便。
我猜这是“如果你给一个人一根拐杖(比如 Plesk),他就会认为他可以依靠那根拐杖”的情况