我有一个EC2实例,其中我在端口8080上运行Flask服务器。
* Running on http://0.0.0.0:8080/ (Press CTRL+C to quit)
我可以运行curl
并从我的EC2实例获取响应。
$ curl -X GET '0.0.0.0:8080/fbeac'
但是,我无法使用公共IP / DNS获取响应并运行
$ curl -X GET '3.135.62.118:8080/fbeac'
产生curl: (7) Failed to connect to 3.135.62.118 port 8080: Connection refused
。当我尝试使用本地计算机curl
时遇到相同的错误。
我的应用程序正在侦听8080端口,该端口是通过运行netstat
检查的。
$ netstat -an | grep 8080
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN
此外,我已确保正确设置了安全组。我已经尝试过使用自定义TCP端口8080,所有TCP端口以及(当前)所有流量。我还打开了HTTP / HTTPS端口,以防万一,但是没有运气。
这使我相信这可能是防火墙问题,但是我在Amazon Linux计算机上,默认策略似乎是ACCEPT
,我通过运行iptables
进行了检查。
$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
还有其他我应该检查的东西还是应该翻转的按钮?
我的AWS实例ID为i-0080c730c4287ca3c
。
答案 0 :(得分:0)
我建议检查您的EC2实例security groups中定义了哪些访问规则。您可能需要打开端口8080
。
此外,请注意,不要在生产中使用flask开发服务器。测试很好,但是您确实应该在生产工作负载中使用uwsgi之类的东西。