【问题标题】:Connect a Flask webservice from a device which is not on the same network从不在同一网络上的设备连接 Flask Web 服务
【发布时间】:2016-11-05 04:16:42
【问题描述】:

我不是网络编程方面的专家,对此知之甚少。我正在尝试在 EC2 实例(Windows Server 2012R2)上运行 Web 服务,并且 Web 服务是使用 Flask 包用 Python 编写的。我可以从本地主机连接到我的网络服务。但我想做的是从不在同一网络上的远程系统连接它。

我从这个link 了解到,将线路更改为app.run(host='0.0.0.0') 将使SAME 网络上的所有设备都连接到我的网络服务。但就像我说的,我想从一个相同网络上的系统进行连接。我怎样才能在 Flask 中做到这一点?另外我还没有安装Apache。这是有必要运行网络服务吗?

任何建议都会很有帮助。非常感谢。

【问题讨论】:

  • 听上去,这和 Flask 关系不大。这更多是网络/路由问题。您必须确保您的远程服务器具有路由并且能够将数据发送到 EC2 服务器。 thegeekstuff.com/2012/04/route-examples。设置好路由后,只需监听所有端口或使用 Flask 指定接口和端口。
  • 我也是这么想的。但它没有用。我已经为所有协议设置了所有端口,但仍然没有连接。
  • @notorious:是的,这行得通。我更改了安全设置并且它行得通。非常感谢

标签: python apache web-services amazon-web-services flask


【解决方案1】:

让 A 成为您连接的服务器。让 B 成为您连接的服务器,据我所知,它有时是 localhost。

为什么B不能连接到A?

1。安全设置

以下是特定于 EC2 的:您必须打开与特定 IP 的连接。检查您的实例的安全设置。如果您向 EC2 实例添加了安全组,请将您的 IP 或服务器的 IP 添加到其中。否则,请确保将 B 的 IP 列入白名单。

2。端口

我不完全确定这是您想要的,但如果每个人 都应该能够访问 A,那么您应该在端口 8000 上运行 Flask 应用程序。如果只有 B(也可能是你的本地主机)应该能够访问A,那么忽略这一段...

0.0.0.0 允许同一网络上的设备连接

自动,是的。顺便说一句,这是您应该指向的 IP,其他服务器也可以连接。所以在你的情况下,也指向0.0.0.0

需要 Apache 吗?

不,Apache 不是必要的。如果需要,您可以持久化 Flask 开发服务器。 (又名。您可以使用python run.py 并让该进程为“Web 服务”运行)具体而言,在这种情况下,您不需要 Apache 来完成这项工作。但是,从长远来看,您将希望 Apache 或 Nginx 运行您的 Web 服务。

这里有一个教程,您可以使用 Python 来安装 Apache2。忽略 MySQL 部分:https://www.digitalocean.com/community/tutorials/how-to-set-up-an-apache-mysql-and-python-lamp-server-without-frameworks-on-ubuntu-14-04

【讨论】:

  • 非常感谢。但我仍然无法让它工作。您对端口的看法是正确的,我将代码重新写入app.run(host='0.0.0.0', port=8000)。如果0.0.0.0 可用于外部设备,则问题出在安全设置中。截至目前,在安全设置中,我允许访问入站规则中的所有流量。但这仍然行不通。现在还有一个疑问,我只是想澄清一下。如何连接到我的 EC2 服务器?现在我只是在浏览器中输入我的公共 IP 以及端口号 publicip:port#PublicDNS:port#。这是正确的吗?我犯了什么愚蠢的错误?
  • 我玩弄了安全设置,终于让它工作了。非常感谢您的回答。
猜你喜欢
  • 2016-09-13
  • 2020-10-23
  • 1970-01-01
  • 1970-01-01
  • 2019-08-12
  • 2019-11-04
  • 2023-04-02
  • 2015-05-03
  • 1970-01-01
相关资源
最近更新 更多