我有一个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上运行,但有主网站域名以某种方式重定向?


当前回答

这是我在Ubuntu-18上唯一有效的解决方案。

在app.py文件中,使用:

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

上面的代码将给出相同的权限错误,除非使用sudo来运行它:

sudo python3 app.py

其他回答

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

fuser -k 5000/tcp

然后运行:

python app.py

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

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

我解了2次,用了2个解

第一个解决方案,遵循以下步骤:

1打开CMD

2在CMD下执行ipconfig命令

3从cmd复制IPv4地址

4在下一步中使用IPv4作为本地主机:

app.run(debug=True, port=5000, host='localhost')

用IPv4地址替换localhost

5为你的前端,做同样的步骤4:

在'http://localhost:5000/auth'替换'localhost'与您的IPv4地址

注意:使用相同的端口{前端,后端}

6同时运行你的两个项目(后端和前端)


第二次,最后一个解决方案没有成功,我用这个解决了它:

在移动端,我使用URL:“http://10.0.2.2:8000”,在Flask端使用

run(debug=True, port=8000, host='localhost')

你不需要为你的应用程序更改端口号,只需配置你的www服务器(nginx或apache)代理查询flask端口。关注uWSGI。

一种方便的方法是使用包python-dotenv: 它会读取一个.flaskenv文件,您可以在其中存储flask的环境变量。

PIP安装python-dotenv 在应用的根目录中创建一个.flaskenv文件

在你指定的文件中:

FLASK_APP=application.py
FLASK_RUN_HOST=localhost
FLASK_RUN_PORT=80

之后你只需要使用flask run运行你的应用,就可以在那个端口上访问你的应用。

请注意,FLASK_RUN_HOST默认值为127.0.0.1,FLASK_RUN_PORT默认值为5000。

对于外部可见的服务器,你不使用apache或其他web服务器,你只需要输入

flask run --host=0.0.0.0 --port=80