我有一个Flask服务器通过端口5000运行,它很好。我可以在http://example.com:5000上访问它

但是是否可以通过http://example.com访问呢?我假设这意味着我必须将端口从5000更改为80。但是当我在Flask上尝试时,当我运行它时,我得到这个错误消息。

Traceback (most recent call last):
  File "xxxxxx.py", line 31, in <module>
app.run(host="0.0.0.0", port=int("80"), debug=True)
   File "/usr/local/lib/python2.6/dist-packages/flask/app.py", line 772, in run
run_simple(host, port, self, **options)
  File "/usr/local/lib/python2.6/dist-packages/werkzeug/serving.py", line 706, in run_simple
    test_socket.bind((hostname, port))
  File "<string>", line 1, in bind
socket.error: [Errno 98] Address already in use

运行lsof -i:80返回

COMMAND   PID     USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
apache2   467     root    3u  IPv4 92108840      0t0  TCP *:www (LISTEN)
apache2  4413 www-data    3u  IPv4 92108840      0t0  TCP *:www (LISTEN)
apache2 14346 www-data    3u  IPv4 92108840      0t0  TCP *:www (LISTEN)
apache2 14570 www-data    3u  IPv4 92108840      0t0  TCP *:www (LISTEN)
apache2 14571 www-data    3u  IPv4 92108840      0t0  TCP *:www (LISTEN)
apache2 14573 www-data    3u  IPv4 92108840      0t0  TCP *:www (LISTEN)

我需要先终止这些进程吗?这样安全吗?或者有没有另一种方法来保持Flask在端口5000上运行,但有主网站域名以某种方式重定向?


当前回答

您可以很容易地禁用端口80上运行的任何进程,然后运行此命令

flask run --host 0.0.0.0 --port 80

或者如果你更喜欢在.py文件中运行它

if __name__ == "__main__":
    app.run(host='0.0.0.0', port=80)

其他回答

使用以下方式修改端口或主机:

if __name__ == '__main__':
  app.run(host='0.0.0.0', port=80)

使用下面的代码启动服务器(我的flask的主入口是app.py):

python app.py

而不是使用:

flask run

我必须将环境中的FLASK_RUN_PORT设置为指定的端口号。下次启动应用程序时,Flask将使用您选择的端口号加载该环境变量。

使用app.run设置端口(port=80,debug=True) 在开发环境中,应该将debug设置为true

如果你想让你的应用程序在相同的端口,即port=5000,那么在你的终端上运行这个命令:

fuser -k 5000/tcp

然后运行:

python app.py

如果你想在指定的端口上运行,例如,如果你想在port=80上运行,在你的主文件中只需要提到这一点:

if __name__ == '__main__':  
    app.run(host='0.0.0.0', port=80)

你的问题是,你有一个apache web服务器已经运行,已经使用端口80。所以,你可以:

Kill apache:你应该通过/etc/init.来完成D /apache2停止,而不是简单地杀死它们。 在apache进程中部署flask应用,就像flask in apache中描述的那样。