如何让 Flask 在端口 80 上运行?

2025-03-12 08:55:00
admin
原创
16
摘要:问题描述:我有一个通过端口 5000 运行的 Flask 服务器,一切正常。我可以通过http://example.com:5000访问它但是是否可以简单地通过http://example.com访问它?我假设这意味着我必须将端口从 5000 更改为 80。但是当我在 Flask 上尝试这样做时,运行时出现此...

问题描述:

我有一个通过端口 5000 运行的 Flask 服务器,一切正常。我可以通过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 上运行,但以某种方式重定向主网站域名?


解决方案 1:

1-停止使用端口 80 的其他应用程序。2-使用端口 80 运行应用程序:

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

解决方案 2:

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

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

解决方案 3:

因此,它会抛出该错误消息,因为您apache2在端口 80 上运行。

如果这是为了开发,我会将其保留在端口 5000 上。

如果用于生产:

不推荐

  • 先停下来apache2

不推荐,正如文档中所述:

您可以在开发期间使用内置服务器,但对于生产应用程序,您应该使用完整部署选项。(请勿在生产中使用内置开发服务器。)

受到推崇的

  • 代理HTTP流量通过apache2Flask。

这样,apache2可以处理所有静态文件(它非常擅长 - 比 Flask 内置的调试服务器好得多)并充当动态内容的反向代理,将这些请求传递给 Flask。

这是有关使用 Apache + mod_wsgi 设置 Flask 的官方文档链接。

编辑 1-对@Djack 的澄清

通过 apache2 将 HTTP 流量代理到 Flask

当请求通过端口 80 ( HTTP) 或端口 443 ( HTTPS) 到达服务器时,Apache 或 Nginx 等 Web 服务器会处理请求的连接并确定如何处理它。在我们的例子中,收到的请求应配置为通过 WSGI 协议传递到 Flask 并由 Python 代码处理。这是“动态”部分。

动态内容的反向代理

像上面那样配置你的 Web 服务器有几个优点;

  • SSL 终止 - 只需进行少量配置,Web 服务器即可优化处理 HTTPS 请求。不要使用 Python 自行处理,因为相比之下,这可能非常不安全。

  • 安全性 - 打开互联网端口需要仔细考虑安全性。Flask 的开发服务器不是为此设计的,与为此目的设计的 Web 服务器相比,它可能存在漏洞或安全问题。请注意,配置不当的 Web 服务器也可能不安全!

  • 静态文件处理 - 内置 Flask Web 服务器可以处理静态文件,但是不建议这样做;Nginx/Apache 在处理静态文件(如图像、CSS、Javascript 文件)方面效率更高,并且只会传递“动态”请求(通常从数据库读取内容或内容发生变化的请求)给 Python 代码处理。

  • +更多。这超出了这个问题的范围。如果你想了解更多信息,请对这个领域进行一些研究。

解决方案 4:

如果使用以下命令更改端口或主机:

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

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

python app.py

而不是使用:

flask run

解决方案 5:

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

  • pip install python-dotenv

  • .flaskenv在应用程序的根目录中创建一个文件

在您指定的文件内:

FLASK_APP=application.py
FLASK_RUN_HOST=localhost
FLASK_RUN_PORT=80

之后,您只需运行您的应用程序flask run并可通过该端口访问您的应用程序。

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

解决方案 6:

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

在文件内部app.py,使用:

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

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

sudo python3 app.py

解决方案 7:

您可以轻松禁用端口 80 上运行的任何进程,然后运行此命令

flask run --host 0.0.0.0 --port 80

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

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

解决方案 8:

如果您希望您的应用程序在同一端口上,即 port=5000,那么只需在您的终端运行以下命令:

fuser -k 5000/tcp

然后运行:

python app.py

如果您想在指定端口上运行,例如如果您想在端口 = 80 上运行,则在主文件中只需提及以下内容:

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

解决方案 9:

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

解决方案 10:

在我的场景中,以下步骤非常有效:

  • 安装软件包:

pip install --upgrade pip
pip install python-dotenv
  • 在我的应用程序目录“flaskr/.flaskenv”中创建一个隐藏文件

  • 添加以下内容:

FLASK_APP=flaskr
FLASK_RUN_HOST=localhost
FLASK_RUN_PORT=8000
  • 最后,再次运行 flask 命令:

flask run
  • 我正在处理的版本是:

pip freeze |grep -i flask
Flask==1.1.1

解决方案 11:

您的问题是,您有一个已在运行的 apache 网络服务器,并且该服务器已在使用端口 80。因此,您可以:

  1. 杀死 Apache:您可能应该通过来执行此操作/etc/init.d/apache2 stop,而不是简单地杀死它们。

  2. 在你的 apache 进程中部署你的 flask 应用程序,正如apache 中的 flask 所描述的。

解决方案 12:

您不需要更改应用程序的端口号,只需配置您的 www 服务器(nginx 或 apache)以将查询代理到 flask 端口即可。请注意uWSGI

解决方案 13:

设置端口app.run(port=80,debug=True)
时,应在 dev 上将 debug 设置为 true

解决方案 14:

最简单、最好的解决方案

将 .py 文件保存到文件夹中。本例中我的文件夹名称为 test。在命令提示符中运行以下命令

c:    est> set FLASK_APP=application.py
c:    est> set FLASK_RUN_PORT=8000
c:    est> flask run

----------------- 以下将被返回 ----------------

 * Serving Flask app "application.py"
 * Environment: production
   WARNING: Do not use the development server in a production environment.
   Use a production WSGI server instead.
 * Debug mode: off
 * Running on http://127.0.0.1:8000/ (Press CTRL+C to quit)
127.0.0.1 - - [23/Aug/2019 09:40:04] "[37mGET / HTTP/1.1[0m" 200 -
127.0.0.1 - - [23/Aug/2019 09:40:04] "[33mGET /favicon.ico HTTP/1.1[0m" 404 -

现在在浏览器中输入:http://127.0.0.1:8000。谢谢

解决方案 15:

我解决了2次,并用2个解决方案解决了

第一个解决方法,步骤如下:

1 打开cmd

2ipconfig在cmd下运行

3 从 cmd 复制 IPv4 地址

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

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

将“localhost”替换为您的 IPv4 地址

5 对于您的前端,执行与步骤 4 相同的操作,例如:

在 'http://localhost:5000/auth' 中将 'localhost' 替换为您的 IPv4 地址

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

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


第二次,最后一个解决方案不起作用,我用这个解决了:

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

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   1603  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1369  
  信创产品在政府采购中的占比分析随着信息技术的飞速发展以及国家对信息安全重视程度的不断提高,信创产业应运而生并迅速崛起。信创,即信息技术应用创新,旨在实现信息技术领域的自主可控,减少对国外技术的依赖,保障国家信息安全。政府采购作为推动信创产业发展的重要力量,其对信创产品的采购占比情况备受关注。这不仅关系到信创产业的发展前...
信创和国产化的区别   30  
  信创,即信息技术应用创新产业,旨在实现信息技术领域的自主可控,摆脱对国外技术的依赖。近年来,国货国用信创发展势头迅猛,在诸多领域取得了显著成果。这一发展趋势对科技创新产生了深远的推动作用,不仅提升了我国在信息技术领域的自主创新能力,还为经济社会的数字化转型提供了坚实支撑。信创推动核心技术突破信创产业的发展促使企业和科研...
信创工作   28  
  信创技术,即信息技术应用创新产业,旨在实现信息技术领域的自主可控与安全可靠。近年来,信创技术发展迅猛,对中小企业产生了深远的影响,带来了诸多不可忽视的价值。在数字化转型的浪潮中,中小企业面临着激烈的市场竞争和复杂多变的环境,信创技术的出现为它们提供了新的发展机遇和支撑。信创技术对中小企业的影响技术架构变革信创技术促使中...
信创国产化   35  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用