Python 与Flask捆绑的服务器在生产中使用是否安全?

Python 与Flask捆绑的服务器在生产中使用是否安全?,python,flask,werkzeug,Python,Flask,Werkzeug,与Flask捆绑的服务器在生产环境中部署是否安全?如果没有,我应该使用什么在生产环境中部署Flask?基本上没有。在生产环境中部署内置开发服务器是不安全的 内置的开发服务器正是为了实现这一点。要在生产中使用,您应该遵循其中一个详细的步骤 这些包括实现WSGI规范的不同服务器,例如或其中一个独立的WSGI服务器 也有可用的和选项无。捆绑服务器是一个开发服务器。它的设计没有考虑到生产环境 默认情况下,它一次不会处理多个请求 如果您将调试模式保持为打开状态并弹出错误,则会打开一个shell,允许在服

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

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

内置的开发服务器正是为了实现这一点。要在生产中使用,您应该遵循其中一个详细的步骤

这些包括实现WSGI规范的不同服务器,例如或其中一个独立的WSGI服务器


也有可用的和选项

。捆绑服务器是一个开发服务器。它的设计没有考虑到生产环境


  • 默认情况下,它一次不会处理多个请求
  • 如果您将调试模式保持为打开状态并弹出错误,则会打开一个shell,允许在服务器上执行任意代码(想想
    os.system('rm-rf/')
  • 开发服务器的伸缩性不好
Flask使用Werkzeug的开发服务器,文档中也提到了同样的内容:

开发服务器不用于生产系统。它是专门为开发目的而设计的,在高负载下性能很差。有关部署设置,请查看页面

建议的方法是运行Flask应用程序。文档中有一整节专门介绍部署:

部署应用程序非常简单,只需安装WSGI服务器(如uWSGI或gunicorn)并运行该服务器而不是Flask的开发服务器:

gunicorn -w 4 -b 127.0.0.1:4000 myproject:app

如果您正在为任何静态资产(如图像或视频)提供服务,需要低级别缓存,或具有更高的并发性要求,建议使用类似Web服务器的服务器,并让它处理您的所有请求

以蹩脚的ASCII格式:

                +----------+
                | Client 2 |
                +----------+
                      |
                      V 
+----------+      +-------+      +----------+
| Client 1 |----->| nginx |<-----| Client 3 |
+----------+      +-------+      +----------+
                      ^
                      |
                      V
           /--------------------\
           | useful nginx stuff |
           | like asset serving |
           | and rate limiting  |
           \--------------------/
                      |
                      V
               +-------------+
               | WSGI server |
               +-------------+
+----------+
|客户2|
+----------+
|
v
+----------+      +-------+      +----------+

|客户端1 |------->| nginx |虽然重量轻且易于使用,但Flask的内置服务器不适合生产,因为它的可扩展性不好,默认情况下一次只提供一个请求。

我使用
supervisor
+
gunicorn
+
nginx
。设置和维护非常简单。“它一次不会处理多个请求”-不正确,请参阅线程和进程参数:@haveAgess:modified。不过,默认情况下,服务器不会是多线程的。Flask文档中没有提到这些参数,因此您必须查看Werkzeug的文档,我认为这比大多数人要做的工作要多。@HaveAgess:来自Flask部署:“Flask的内置服务器不适合生产,因为它的扩展性不好,默认情况下一次只服务一个请求。”@葛丽丽:是的,两者都是WSGI服务器。这就是为什么您可以在不修改任何代码的情况下将开发服务器换成生产服务器的原因。是否有可能在2014年更新此答案?“基本上不”是含糊不清的,因为+ensnare提出了两个问题。更新了答案以消除含糊不清。答案的其余部分似乎仍然完全正确。链接仍然指向最新的flask文档。这为这个问题提供了更广泛的背景,并解释了为什么不应该使用与flask捆绑的服务器。