【发布时间】:2018-01-10 22:18:45
【问题描述】:
我创建了一个 EC2 VPC RHEL 实例并部署了一个运行嵌入式码头 Web 服务器的 Java 应用程序。为了简单理解,这个 Web 应用程序正在处理基本的 HTML 请求。对于我的初始测试,我创建了一个允许所有传入和传出流量的安全组(All All 0.0.0.0/0, ::/0)。
我希望从公共 IP 地址浏览网页,但不知何故它不起作用。我还验证了 Jetty 正在监听 0.0.0.0。所以,码头似乎不是问题。我花了半天时间弄清楚它,但它不起作用,也无法找出原因。
然后我制作了一个非常基本的 TCP 服务器 (https://systembash.com/a-simple-java-tcp-server-and-tcp-client/) 并部署在同一个 AWS ec2 实例上,然后我尝试将来自客户端的请求作为 TCP 客户端从我的系统发送,但它不起作用。
但是,我正在从 WinSCP 传输文件并仅使用此公共 IP 从 putty 运行命令。这意味着公共 IP 不是问题。
我可以看到 putty、WinSCP 和我的 java 客户端的唯一区别是,对于 putty,我还提供私钥作为授权过程的一部分(在 auth 中),但其中 java 或浏览器,我正在访问它直接地。
无法理解问题出在哪里。从公共 IP 调用 (ec2-xx-xx-xx-xxx.xx-west-2.compute.amazonaws.com) 到私有 IP 调用的 DNS 转换是否存在问题或授权问题?
下面是 AWS 的 Netstat 跟踪(Web 服务器在 8080 上运行,我在 IP4 堆栈上运行 jvm,使用 -Djava.net.preferIPv4Stack=true)
[ec2-user@ip-172-31-xx-xxx ~]$ sudo netstat -plnt
活跃的互联网连接(仅限服务器) Proto Recv-Q Send-Q 本地地址 外部地址 状态 PID/程序名称
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 9321/java
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1627/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1091/master
tcp6 0 0 :::22 :::* LISTEN 1627/sshd
tcp6 0 0 ::1:25 :::* LISTEN 1091/master
有什么帮助吗?
【问题讨论】:
-
你打开安全组的8080端口了吗?
-
我已经提到“我创建了一个允许所有传入和传出流量的安全组”。
标签: java amazon-web-services amazon-ec2