【问题标题】:Running java application on Amazon AWS在 Amazon AWS 上运行 java 应用程序
【发布时间】: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


【解决方案1】:

很抱歉打扰读者。我做了一切,但问题仍然存在。然后我将客户端程序提供给了我的一位同事,他在他的家庭网络上并且在那里它可以工作......

所以,问题不在于 AWS,而在于我的公司网络安全阻止了请求。

【讨论】:

  • 公司通常会阻止 DNS、HTTP、HTTPS 以外的端口(如果需要,还可以阻止 FTP、SSH 和 SMTP/POP3/IMAP)。在端口 8080 上测试 webapp 是一项挑战。您可以使用 SSH 本地端口转发 (ssh -i user.pem -L 9000:localhost:8080 ec2-user@ec2-1-2-3-4.compute- 1.amazonaws.com)或 iptables 端口重定向,甚至是带有端口转发(80 到 8080)的 ELB,以允许您在端口 80 上连接到防火墙之外,然后重定向到端口 8080。
  • 感谢 Jarmod 的提示。
猜你喜欢
  • 1970-01-01
  • 2016-03-11
  • 2018-04-30
  • 2016-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-02
  • 1970-01-01
相关资源
最近更新 更多