我有一个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端口以防万一,但没有运气。
这让我相信这可能是一个防火墙问题,但我在一台亚马逊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
。
2条答案
按热度按时间bgtovc5b1#
我建议您检查EC2示例security groups中定义了哪些访问规则。您可能需要打开端口
8080
。另外,作为一个侧面说明,考虑不要在生产中使用flask开发服务器。它适合测试,但是您真的应该使用像uwsgi这样的东西来处理生产工作负载。
7nbnzgx92#
以防有人也有这个问题,请确保您有一个网关配置