在 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,以便您可以有效地使用自动缩放?