【问题标题】:how do i configure python/flask for public access with windows firewall如何使用 Windows 防火墙配置 python/flask 以进行公共访问
【发布时间】:2014-09-29 14:49:35
【问题描述】:

我们用python开发了一个应用程序,并正在使用flask通过http请求公开它的api。

  • 所有这些都在 WINDOWS 上 -

一切正常,我们在内部进行了测试,没有出现任何问题,现在我们正在尝试在现实世界中使用该应用程序 - 我们已经让我们的 IT 部门为我们提供了一个面向公众的 IP/端口地址(通过防火墙??),现在我们根本无法访问服务器/应用程序。

经过一番挖掘,我们发现问题与Windows防火墙配置有关,开启时无法正常工作,关闭时一切正常。

flask 应用代码运行如下:app.run(debug=False, host='0.0.0.0', port=8080) 端口 8080 在防火墙异常中设置,python.exe 在程序异常中设置

netstat -a 显示应用正在等待连接。

如果我尝试通过 chrome 访问该站点,则会收到错误:ERR_CONNECTION_TIMED_OUT。

打开防火墙后,我根本看不到任何“点击”进入应用程序。

我还缺少其他配置吗?

非常感谢。

【问题讨论】:

  • 首先——看起来您正在尝试将 Flask 调试服务器用作生产服务器。这是一个坏主意,它只是为开发而设计的,并且有一些限制,使其成为生产环境的糟糕选择。带有 Apache 的 mod_wsgi 可能是 Windows 的最佳选择。
  • 在防火墙点上,我手头没有 Windows 计算机 - 而是解锁服务,是否可以在您关心的实际端口上添加入站规则允许它通过了吗?

标签: python flask windows-firewall


【解决方案1】:

从带有防火墙的 Windows 机器上运行 Flask 时,我使用以下命令打开一个端口:

netsh firewall add portopening TCP 8080 "MyAppName"
netsh advfirewall firewall add rule name="MyAppName TCP Port 8080" dir=in action=allow protocol=TCP localport=8080
netsh advfirewall firewall add rule name="MyAppName TCP Port 8080" dir=out action=allow protocol=TCP localport=8080

它对我有用。是不是太多了?我不知道,因为我不是防火墙专家 :(

【讨论】:

  • 我可以将 MyAppName 设置为任何值,还是在这种情况下必须为 python
【解决方案2】:

当作为服务运行时,运行该服务的程序不是python.exe,而是pythonservice.exe。您必须将其添加到 Windows 防火墙设置中允许的程序中。就我而言,它位于C:\Python33\Lib\site-packages\win32\pythonservice.exe 下。

【讨论】:

  • C:\Users\<username>\AppData\Local\Programs\Python\Python38\Lib\site-packages下没有win32
猜你喜欢
  • 1970-01-01
  • 2018-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多