我在 ubuntu EC2 实例上运行一个 hello-world http 服务器,比方说。myurl.com
我无法curl
从我的客户端访问它:
$ curl myurl.com:4296
curl: (7) Failed to connect to myurl.com port 4296: Connection refused
当我尝试访问任何其他端口时,我的连接超时:
$ curl myurl.com:4244
curl: (7) Failed to connect to myurl.com port 4244: Operation timed out
我在 AWS 上有以下入站规则:
我可以在服务器上卷曲它:
$ curl localhost:4296
Hello World
我的网络状态:
$ netstat -a | grep 4296
tcp 0 0 localhost:4296 0.0.0.0:* LISTEN
我究竟做错了什么?
答案1
端口 4296 上的进程仅侦听本地主机 / 127.0.0.1地址,因此无法从外部访问。您必须更改配置(或程序本身,如果是您编写的程序)才能监听0.0.0.0- 这将使它继续监听全部地址。
以下是我的系统中的一个例子:
~ # netstat -tnlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1311/sshd
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 1183/cupsd
这里 SSH 在所有地址上监听端口 22,因此可以从外部访问(当然,如果防火墙和 SG 允许的话)。
另一方面,CUPS 仅在本地主机(127.0.0.1)上监听端口 631,即使防火墙/SG 允许该端口,也无法从外部访问。
希望有帮助:)
答案2
检查您是否可以通过公共 IP 访问它。如果可以,则需要检查 route53 是否配置正确。如果无法通过公共 IP 访问,则添加防火墙规则以允许流量。 https://linuxdiaryblog.blogspot.com/2020/06/add-firewall-exception-to-port.html?m=1