如何通过端口转发让我的朋友可以使用 Flask 应用程序?
How do I make a Flask app available for my friends through port-forwarding?
所以我创建了一个简单的 Flask 应用程序来自动执行我们在数学中经常需要做的某些计算 class。我现在正试图让我的朋友也使用它,但我无法正确设置本地端口转发。当我 运行 应用程序时,我可以从我的本地网络访问它,但不能从它的外部访问它。 (我通过移动数据上的 phone 尝试访问网络应用程序来测试它,但它没有响应。)我知道 ssh 隧道可能是更好的方法,但我仍然想要找出我在这里做错了什么。
我对此很陌生,并使用此视频作为参考:https://www.youtube.com/watch?v=jfSLxs40sIw。以下是我已经尝试过的事情的简要总结:
我将 app.run()
更改为 app.run(host='0.0.0.0',port=5000)
以使 Flask 响应所有 public ip。
当我现在 运行 我的应用程序时,我可以通过以下方式从我的计算机访问它:
然后我使用 freedns.afraid.org 创建了一个子域 flaskdries.mooo.com。当将子域重定向到列表中的最新 ip 地址 (192.168.1.101:5000) 时,它总是会拒绝连接,即使在 运行 正在运行该应用程序的电脑上也是如此。使用 127.0.0.1:5000 最终对我网络 (image) 上的所有设备都有效,但对我网络外的设备仍然无效。
我想这是一件显而易见的事情,因为我的 WAN ip 无法在此方法中指定。因此,如果我是正确的,当有人进入子域时,我的路由器没有 link,因此也没有 运行 连接应用程序的设备。问题是我不知道应该在哪里指定我的 WAN ip 或类似的东西。
我注意到当我创建子域时目标被自动设置为我的 WAN ip
(image)。起初我以为简单地添加 :5000 就可以了,但不幸的是它没有。
正如您可能已经注意到的那样,我对此非常陌生,除了互联网之外没有任何其他我可以依赖的信息,所以欢迎任何帮助!
提前致谢,
干燥
您好,欢迎来到 stack overflow。
为了从互联网访问您的应用程序,您需要一个外部静态 IP,您应该能够从您的互联网提供商处获得该 IP。然后将您的域设置为指向该 IP。如果你不想每次都指定端口,你可以 运行 如果你想要 https,你可以在端口 80 或 443 上烧瓶应用程序。
另外,运行 将它放在某种网络服务器后面可能是明智的,比如 nginx,因为 app.run
仅用于本地开发。
您正在使用本地网络的 IP 地址。
如果您的机器启用了端口转发,那么您必须使用 public ip 地址。
您的路由器在管理界面中应该有 public IP 地址。
简化说明:
您的域应该指向路由器的外部 IP。
然后您的路由器通过 portforwading(网络 IP 地址)将请求转发到您的机器。
经过更多研究,我发现问题出在我有一个单独的调制解调器和路由器。对于大多数人来说,在路由器内部转发一个端口就足够了,但我还必须将一个端口从我的调制解调器转发到我的路由器。有点烦人,我没有早点想到这一点。谢谢大家的回复。
所以我创建了一个简单的 Flask 应用程序来自动执行我们在数学中经常需要做的某些计算 class。我现在正试图让我的朋友也使用它,但我无法正确设置本地端口转发。当我 运行 应用程序时,我可以从我的本地网络访问它,但不能从它的外部访问它。 (我通过移动数据上的 phone 尝试访问网络应用程序来测试它,但它没有响应。)我知道 ssh 隧道可能是更好的方法,但我仍然想要找出我在这里做错了什么。
我对此很陌生,并使用此视频作为参考:https://www.youtube.com/watch?v=jfSLxs40sIw。以下是我已经尝试过的事情的简要总结:
我将 app.run()
更改为 app.run(host='0.0.0.0',port=5000)
以使 Flask 响应所有 public ip。
当我现在 运行 我的应用程序时,我可以通过以下方式从我的计算机访问它:
然后我使用 freedns.afraid.org 创建了一个子域 flaskdries.mooo.com。当将子域重定向到列表中的最新 ip 地址 (192.168.1.101:5000) 时,它总是会拒绝连接,即使在 运行 正在运行该应用程序的电脑上也是如此。使用 127.0.0.1:5000 最终对我网络 (image) 上的所有设备都有效,但对我网络外的设备仍然无效。 我想这是一件显而易见的事情,因为我的 WAN ip 无法在此方法中指定。因此,如果我是正确的,当有人进入子域时,我的路由器没有 link,因此也没有 运行 连接应用程序的设备。问题是我不知道应该在哪里指定我的 WAN ip 或类似的东西。
我注意到当我创建子域时目标被自动设置为我的 WAN ip (image)。起初我以为简单地添加 :5000 就可以了,但不幸的是它没有。
正如您可能已经注意到的那样,我对此非常陌生,除了互联网之外没有任何其他我可以依赖的信息,所以欢迎任何帮助!
提前致谢,
干燥
您好,欢迎来到 stack overflow。
为了从互联网访问您的应用程序,您需要一个外部静态 IP,您应该能够从您的互联网提供商处获得该 IP。然后将您的域设置为指向该 IP。如果你不想每次都指定端口,你可以 运行 如果你想要 https,你可以在端口 80 或 443 上烧瓶应用程序。
另外,运行 将它放在某种网络服务器后面可能是明智的,比如 nginx,因为 app.run
仅用于本地开发。
您正在使用本地网络的 IP 地址。 如果您的机器启用了端口转发,那么您必须使用 public ip 地址。 您的路由器在管理界面中应该有 public IP 地址。
简化说明: 您的域应该指向路由器的外部 IP。 然后您的路由器通过 portforwading(网络 IP 地址)将请求转发到您的机器。
经过更多研究,我发现问题出在我有一个单独的调制解调器和路由器。对于大多数人来说,在路由器内部转发一个端口就足够了,但我还必须将一个端口从我的调制解调器转发到我的路由器。有点烦人,我没有早点想到这一点。谢谢大家的回复。