我们用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
。
打开防火墙后,我根本看不到任何“点击”进入应用程序。
我还缺少其他一些配置吗?
非常感谢。
当从带有防火墙的 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
它对我有用。是不是太多了?我不知道,因为我不是防火墙专家:(
当作为服务运行时,运行该服务的程序不是
python.exe
而是 pythonservice.exe
。您必须将其添加到 Windows 防火墙设置中允许的程序中。 就我而言,它位于 C:\Python33\Lib\site-packages\win32\pythonservice.exe
下。