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

2024-04-26 00:24:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一台烧瓶服务器在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上运行,但让主网站域以某种方式重定向?


Tags: 端口runinpyhttpdataportexample
3条回答

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

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

所以它会抛出错误消息,因为您在端口80上运行了apache2

如果这是为了发展,我就把它留在5000号港。

如果是为了生产:

不推荐

  • 先停止apache2

不推荐,因为它在文件中说明:

You can use the builtin server during development, but you should use a full deployment option for production applications. (Do not use the builtin development server in production.)

推荐

  • 代理HTTP通过apache2传输到烧瓶。

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

关于使用Apache+mod wsgi设置烧瓶的官方文档。

编辑1-对@Djack的澄清

Proxy HTTP traffic to Flask through apache2

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

reverse proxy for dynamic content

像上面这样配置web服务器有一些优点

  • SSL终止-web服务器将经过优化,只需少量配置即可处理HTTPS请求。不要在Python中“滚自己的”,相比之下,Python可能非常不安全。
  • 安全性-打开到internet的端口需要仔细考虑安全性。Flask的开发服务器不是为此而设计的,与为此而设计的web服务器相比,它可能存在打开的错误或安全问题。请注意,配置错误的web服务器也可能不安全!
  • 静态文件处理-内置的Flask web服务器可以处理静态文件,但不建议这样做;Nginx/Apache在处理静态文件(如图像、CSS和,Javascript文件,只传递由Python代码处理的“动态”请求(通常从数据库读取内容或内容更改的请求)。
  • +更多。这接近这个问题的范围。如果你想要更多的信息,那就对这个领域做些研究。

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

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

相关问题 更多 >