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

发布于 2021-01-29 19:33:40

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

关注者
0
被浏览
90
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    因为您已经apache2在端口80上运行,所以抛出了该错误消息。

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

    如果用于生产:

    不建议

    • apache2先停下来

    不建议使用,因为它在文档中指出:

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

    推荐的

    • HTTP通过代理apache2访问Flask。

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

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

    编辑1-@Djack的说明

    通过apache2到Flask的代理HTTP流量

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

    动态内容的反向代理

    像上面那样配置Web服务器有一些好处;

    • SSL终端-仅需少量配置即可优化Web服务器以处理HTTPS请求。不要在Python中“自己动手”,相比之下,这可能非常不安全。
    • 安全性-打开Internet端口需要仔细考虑安全性。Flask的开发服务器不是为此目的而设计的,并且与为此目的设计的Web服务器相比,可能存在开放的错误或安全问题。请注意,配置错误的Web服务器也可能不安全!
    • 静态文件处理-内置的Flask Web服务器可以处理静态文件,但是不建议这样做。Nginx / Apache在处理静态文件(如图像,CSS,Javascript文件)时效率更高,并且仅传递“动态”请求(那些内容通常是从数据库中读取或内容发生更改的请求)以由Python代码处理。
    • +更多。这正接近此问题的范围。如果您想了解更多信息,请对该领域进行一些研究。


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看