我正在使用具有虚拟环境的 Flask 应用程序。当我启动服务器时,我可以通过 IP 在本地访问它127.0.0.1:5000
,但我想让它在我的WLAN
(pointing at 10.0.0.1:5000)
.我不知道是否可能,虚拟环境使我的服务器沙箱化。
我天真地尝试更改我的/etc/hosts
文件
127.0.0.1 10.0.0.2
但是当我启动浏览器时http://10.0.0.2:5000,那是行不通的。 (我仍然可以访问其他服务http://10.0.0.2,但端口 5000 的重定向不起作用)。
我不确定是否正确。非常感谢您的帮助。
编辑 对于虚拟环境,我只是使用虚拟环境,一个处理 python 依赖性的实用程序。然后我安装了Flask-SocketIO。我不确定它是否真的是沙盒的,但事实是我无法连接到端口 5000。
如果我做
sudo nestat -anp | grep 5000
我得到:
tcp 0 0 127.0.0.1:5000 0.0.0.0:* LISTEN 18541/python
答案1
为什么不让 Flask 监听所有公共 IP。
http://flask.pocoo.org/docs/0.10/quickstart/#a-minimal-application
外部可见的服务器
如果您运行该服务器,您会注意到该服务器只能从您自己的计算机访问,而不能从网络中的任何其他计算机访问。这是默认设置,因为在调试模式下,应用程序的用户可以在您的计算机上执行任意 Python 代码。
如果您已禁用调试或信任网络上的用户,则可以通过简单地将 run() 方法的调用更改为如下所示的方式使服务器公开可用:
app.run(主机='0.0.0.0')
这告诉您的操作系统侦听所有公共 IP。
答案2
/etc/hosts 文件用于名称查找,而不用于 IP 地址到 IP 地址的重定向。此外,如果沙箱有效,您应该无法从 LAN/WLAN 端访问虚拟服务器。我可以建议两种可能的方法来解决您的问题,但可能还有其他方法。
1) 如果虚拟服务器可以配置为软化沙箱 - 即具有非环回 IP 地址,那将是最简单的解决方案。
2)第二种方式需要更多的工作。这需要编写一个在后台运行的简单侦听器/转发器程序,侦听端口 5000 上的实际计算机地址(但不是任意地址),并将数据包转发到 127.0.0.1。如果可行,您可以使用路由器将发送到任意私有 IP 地址:端口(例如 10.0.0.2:5000)的数据包转发到侦听器计算机的地址。