与 Flask 捆绑在一起的服务器是否可以安全地部署在生产环境中?如果没有,我应该使用什么来在生产环境中部署 Flask?
最佳答案
否。捆绑的服务器是 开发 服务器。它在设计时并未考虑到生产环境。
- 默认情况下一次不会处理多个请求。
- 如果您打开 Debug模式并弹出错误,它会打开一个 shell,允许在您的服务器上执行任意代码(想想
os.system('rm -rf/')
)。 - 开发服务器无法很好地扩展。
Flask 使用 Werkzeug 的开发服务器,文档也是这么说的:
The development server is not intended to be used on production systems. It was designed especially for development purposes and performs poorly under high load. For deployment setups have a look at the Application Deployment pages.
推荐的方法是use a production WSGI server运行您的 Flask 应用程序。文档中有一个专门用于部署的部分:Deployment Options .
部署您的应用程序就像安装 uWSGI 或 gunicorn 之类的 WSGI 服务器并运行它而不是 Flask 的开发服务器一样简单:
gunicorn -w 4 -b 127.0.0.1:4000 myproject:app
如果您要提供图像或视频等任何静态 Assets 、需要低级缓存或有更高的并发需求,建议使用像 nginx 这样的网络服务器并让它处理您的所有请求。
糟糕的 ASCII 格式:
+----------+
| Client 2 |
+----------+
|
V
+----------+ +-------+ +----------+
| Client 1 |----->| nginx |<-----| Client 3 |
+----------+ +-------+ +----------+
^
|
V
/--------------------\
| useful nginx stuff |
| like asset serving |
| and rate limiting |
\--------------------/
|
V
+-------------+
| WSGI server |
+-------------+
要真正运行 WSGI 服务器进程,你可以使用Supervisor .如果由于某种原因失败,它会自动重新启动服务器,保留日志并作为守护程序运行,以便您的服务在服务器启动时启动。
关于python - 与 Flask 捆绑在一起的服务器在生产中使用是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12269537/