Flask仅在127.0.0.1上监听,忽略主机参数。

9
我在Windows 7上使用Flask。 Flask及相关版本如下:
Flask==0.10.1
Werkzeug==0.9.3

使用http://127.0.0.1:5000从同一台计算机访问该应用程序是可以的。 但是,从局域网中的另一台计算机访问失败:http://192.168.101.103:5000

我使用以下参数启动应用程序:

#app.py
if __name__ == '__main__':
    app.run( host='0.0.0.0:5000')

我不明白的一件事是,当我在同一台计算机上启动netcat,并且Flask正在监听相同的端口时,它可以正常工作,而且甚至可以从另一台计算机访问netcat:

>c:\Python27\python manage.py runserver
>
 * Running on http://127.0.0.1:5000/
 * Restarting with reloader

works ...

>nc -l -p 5000

在同一台计算机上运行,使用相同的端口?
GET / HTTP/1.1
Accept: text/html, application/xhtml+xml, */*
Accept-Language: de-DE
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0;

Accept-Encoding: gzip, deflate
Host: 192.168.101.103:5000
DNT: 1
Connection: Keep-Alive

即使接受来自另一台计算机的连接?

除了如何在局域网中启动Flask之外,我还想知道,如何让一台计算机的两个进程监听同一个端口?

谢谢!

1个回答

12

端口号需要在它自己的参数中指定:

app.run(
    host="0.0.0.0",
    port=5000
)

看起来这个语句被忽略了。我禁用了 if __name__ == '__main__': 并在 app.run( host="0.0.0.0:5000") 上出现了错误。现在它可以工作,但是有奇怪的启动/停止行为。有时重新启动后 Flask 会绑定到 127.0.0.1。我认为我必须使用 nginx 作为代理服务器,以便在局域网中提供 Flask 服务。 - Valentin H
1
不要将内置服务器用于除开发工作以外的任何用途。它并不是为此而构建的。在生产环境中,请使用gunicorn或其他容器。 - Rachel Sanders

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接