在 Amazon EC2 上运行的 Tomcat 在 AWS 之外无法访问

Posted

技术标签:

【中文标题】在 Amazon EC2 上运行的 Tomcat 在 AWS 之外无法访问【英文标题】:Tomcat running on Amazon EC2 not accessible outside AWS 【发布时间】:2018-11-02 07:03:27 【问题描述】:

已经找到了很多关于这个问题的答案,但似乎没有任何效果。

我有一个 Windows EC2 实例,它安装了 tomcat 8,并在端口 8080 上运行。我已经部署了我的应用程序,我可以通过连接到实例并在浏览器中启动 url 以 localhost:8080/myapp 的身份访问它。

但是,当我尝试通过 aws 外部的家庭网络访问它时,应用程序无法连接。

我知道这是因为 security group 设置,但我已经知道了。即使在我这样做之后

安全组 -> 入站 -> 编辑:

自定义 TCP 规则 : TCP: 8080 : Source Anywhere

问题仍然存在。甚至尝试使用all traffic 添加规则,但仍然没有成功。

另外,值得一提的是,我有一个与我的实例关联的Elastic IP。一直在尝试使用elastic.ip:8080/myapp 访问但无法连接。

我还能尝试什么? tomcat的xml有什么配置吗?

【问题讨论】:

您是否检查过任何应用在其上的 ACL。您还可以修改弹性搜索策略设置并添加您的 IP。如果它与弹性搜索有关。 它与弹性搜索完全无关。我提到了弹性 IP。 我认为 NACL 没有任何问题,因为它默认允许所有流量。您是否在安全组中定义了多个规则? 是的,只有一个。 TCP:80:Anywhere 您能否启动另一个具有公共 ip 的实例,然后连接到它。尝试在该实例中调用私有 ip 【参考方案1】:

映像实例并从创建的 AMI 启动新实例。

EC2 似乎在过去 12 小时内遇到了一些问题,即某些实例的公共接口不接受流量,即使其他实例使用完全相同的启动配置启动(在我的情况下是 Auto Scaling 组的一部分)没问题。

如果您有高级技术支持,我建议您让坏实例继续运行,并使用实例 ID、公共 IP 地址等提交工单。

【讨论】:

【参考方案2】:

我会检查“wget”是否工作。如果是,则意味着 tomcat 服务器已启动并正在运行。

wget <hostname>:8080

此外,您家中的计算机可能有防火墙,阻止您检索端口 8080。您可以尝试从您的家用计算机远程登录到端口 8080 的服务器吗?

最后还要检查服务器上的 IPtables:-

iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 8080 -j ACCEPT
iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080

【讨论】:

【参考方案3】:

请确保 Tomcat 不仅在监听 127.0.0.1:8080。这将使其可用于 localhost 但不能用于其他地方。在您的 server.xml 中查找连接器地址,并确保将其设置为 0.0.0.0 以侦听所有接口:

# Example
<Connector port="8080" protocol="HTTP/1.1" 
           address="0.0.0.0" />

您还可以查看netstat -an | grep :8080 的输出,您应该会看到类似这样的一行

tcp        0      0 0.0.0.0:8080              0.0.0.0:*               LISTEN

如果你看到

tcp        0      0 127.0.0.1:8080              0.0.0.0:*               LISTEN

您知道它只在 127.0.0.1 上侦听,这在您的本地主机之外是不可用的。

【讨论】:

添加了相同的内容。但是,连接器条目还有一个字段redirectPort=8443。有什么关系吗? 这是我在 netstat TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING TCP 127.0.0.1:8080 127.0.0.1:53417 ESTABLISHED TCP 127.0.0.1:8080 127.0.0.1:53419 ESTABLISHED TCP 127.0.0.1:8080 127.0.0.1:53420 ESTABLISHED TCP 127.0.0.1:53417 127.0.0.1:8080 ESTABLISHED TCP 127.0.0.1:53419 127.0.0.1:8080 ESTABLISHED TCP 127.0.0.1:53420 127.0.0.1:8080 ESTABLISHED 之后得到的 它会根据TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 这一行显示它正在侦听您需要的所有地址。仅当请求是 HTTPS 时,重定向端口才有意义

以上是关于在 Amazon EC2 上运行的 Tomcat 在 AWS 之外无法访问的主要内容,如果未能解决你的问题,请参考以下文章

在 amazon ec2 (beanstalk) 上编辑已部署文件的权限

如何在 Amazon Web Services EC2 中安装 Tomcat

如何在 Amazon 的 EC2 上运行 Java 服务器?

如何在 Amazon EC2 上部署 Java webapp,以便您可以有效地使用自动缩放?

如何在 Amazon EC2 上部署 Java webapp,以便您可以有效地使用自动缩放?

如何在 Amazon ec2 上运行 seed.rb 文件