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

我有一个通过端口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上运行,但主网站域名redirect?

谢谢。

所以这是抛出错误信息,因为你有端口80上运行的apache2

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

如果是为了生产:

不build议

  • 先停止apache2 ;

不build议在文档中说明:

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

推荐的

  • 通过apache2代理HTTPstream量到Flask。

通过这种方式, apache2可以处理所有的静态文件(它非常擅长 – 比Flask中内置的debugging服务器好得多),并充当dynamic内容的反向代理,将这些请求传递给Flask。

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

编辑1 – 澄清@Djack

通过apache2代理HTTPstream量到Flask

当请求通过端口80( HTTP )或端口443( HTTPS )发送到服务器时,Apache或Nginx等Web服务器会处理请求的连接,并处理如何处理该请求。 在我们的例子中,收到的请求应该被configuration成通过WSGI协议上的Flask并由Python代码处理。 这是“dynamic”的一部分。

dynamic内容的反向代理

configuration上面的Web服务器有一些优点,

  • SSL终止 – Web服务器将被优化,只处理一点点configuration就可以处理HTTPS请求。 不要在Python中“滚动自己的”,这可能是相当不安全的。
  • 安全 – 开放互联网端口需要仔细考虑安全性。 Flask的开发服务器并不是为此而devise的,与为此devise的Web服务器相比,Flask的开发服务器可能有开放的缺陷或安全问题。 请注意,configuration错误的Web服务器也可能不安全!
  • 静态文件处理 – 内置Flask Web服务器可以处理静态文件,但不build议这样做; Nginx / Apache在处理图片,CSS,Javascript文件等静态文件方面效率更高,并且只能通过“dynamic”请求(通常从数据库读取内容或者内容发生变化的请求),由Python代码处理。
  • +更多。 这与这个问题的范围接近。 如果你想了解更多信息,请在这方面进行一些研究。

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

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

你的问题是,你有一个Apache Web服务器已经运行,已经在使用端口80.所以,你可以:

  1. 杀死Apache:你可能应该通过/etc/init.d/apache2 stop ,而不是简单的杀死它们。

  2. 在apache进程中部署你的烧瓶应用程序,就像apache中的烧瓶描述的一样。

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

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

您不需要更改您的应用程序的端口号,只需configuration您的万维网服务器(nginx或Apache)代理查询烧瓶端口。 在uWSGI上uWSGI