我有一个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
。
发布于 2019-12-03 23:23:07
我建议检查一下您的EC2实例security groups中定义了哪些访问规则。您可能需要打开端口8080
。
另外,作为附带说明,请考虑不要在生产环境中使用这样的flask开发服务器。它对于测试来说很好,但是对于生产工作负载,您确实应该使用类似uwsgi的东西。
https://stackoverflow.com/questions/59152754
复制相似问题