与Flask捆绑在一起的服务器是否可以安全地用于生产?

ens*_*are 59 python werkzeug flask

与Flask捆绑在一起的服务器是否可以安全地在生产环境中进行部署?如果没有,我应该使用什么来在生产中部署Flask?

Ble*_*der 79

.捆绑服务器是开发服务器.它的设计并非考虑到生产环境.

  • 默认情况下,它不会一次处理多个请求.
  • 如果你打开调试模式并弹出一个错误,它会打开一个shell,允许在你的服务器上执行任意代码(想想os.system('rm -rf /')).
  • 开发服务器不能很好地扩展.

Flask使用Werkzeug的开发服务器,文档说同样的事情:

开发服务器不适用于生产系统.它专为开发目的而设计,在高负载下性能很差.对于部署设置,请查看" 应用程序部署"页面.

建议的方法是使用生产WSGI服务器来运行Flask应用程序.整个部分专门用于部署文档:部署选项.

部署应用程序就像安装WSWS服务器(如uWSGI或gunicorn)并运行它而不是Flask的开发服务器一样简单:

gunicorn -w 4 -b 127.0.0.1:4000 myproject:app
Run Code Online (Sandbox Code Playgroud)

如果您要提供任何静态资产(如图像或视频),需要低级缓存,或者具有更高的并发性要求,建议使用像nginx这样的网络服务器并让它处理您的所有请求.

蹩脚的ASCII形式:

                +----------+
                | Client 2 |
                +----------+
                      |
                      V 
+----------+      +-------+      +----------+
| Client 1 |----->| nginx |<-----| Client 3 |
+----------+      +-------+      +----------+
                      ^
                      |
                      V
           /--------------------\
           | useful nginx stuff |
           | like asset serving |
           | and rate limiting  |
           \--------------------/
                      |
                      V
               +-------------+
               | WSGI server |
               +-------------+
Run Code Online (Sandbox Code Playgroud)

要实际运行 WSGI服务器进程,可以使用Supervisor.如果由于某种原因失败,它会自动重启服务器,保留日志,并作为守护程序运行,以便在服务器启动时启动服务.

  • "它不会一次处理多个请求" - 不是这样,请参阅线程和进程参数:http://werkzeug.pocoo.org/docs/0.11/serving/ (3认同)
  • 我使用`supervisor` +`gunicorn` +`nginx`.它的设置和维护非常简单. (2认同)
  • @HaveAGuess:来自 Flask 部署 [doc](http://flask.pocoo.org/docs/0.11/deploying/):“Flask 的内置服务器不适合生产,因为它不能很好地扩展,并且 **默认情况下一次仅处理一个请求。**” (2认同)

oll*_*_uk 17

基本上没有.内置开发服务器在生产环境中部署是不安全的.

内置的开发服务器就是这样的.要在生产中使用,您应该按照此处详述的步骤之一进行操作.

这些包括实现WSGI规范不同的服务器,如阿帕奇/ mod_wsgi的或这些独立WSGI服务器的一个http://flask.pocoo.org/docs/deploying/wsgi-standalone/

还有uWSGIFastCGI选项可用

  • 是否有可能获得2014年的答案更新?"基本上没有"是模棱两可的,因为+ ensnare提出了两个问题. (3认同)