首页 > Python资料 博客日记
python部署项目为什么要用Nginx和uWSGI
2024-02-28 16:00:03Python资料围观117次
一、测试运行python项目
1.1 Flask项目
说明1:当我们直接用编译器运行Flask项目的时候,会有一个提示:意思就是:这是开发环境的服务器,不能用于生产环境的部署,请使用WSGI的服务器替换
1.2 Django项目
说明2:当我们直接用编译器运行Django项目的时候,同样有个提示,这是一个开发环境的服务器,意思就是同样不能用于生产环境
1.3 总结
-
- Flask自带一个服务器,主要用在开发环境。默认情况下一次只能处理一个请求,处理能力比较有限。
- Django 运行 runserver 命令可以直接作为服务器使用,但是也是单线程的。性能差,如果出现错误挂掉。那么整个进程都挂掉了
- 所以我们在生产环境要,就要使用安全稳定效率高,性能强的服务器。
- 之所以Flask和Django直接运行不能用于生产环境是因为Flask和Django是web开发框架,而不是web服务器,web框架开发的时候,只是为了方便测试,提供了一个测试服务器而已。
二、web服务器
Django
或flask
就是web框架。web服务器的特点:
-
- 接受客户端(浏览器,app,小程序等)发送的请求
- web服务器通常都会支持高并发(Nginx上万级别的并发)
所以我们在部署python项目的时候,都需要再额外部署一个web服务器,主要作用就是给我们的应用提供一个高并发安全的互联网访问环境,通常我们使用Nginx作为我们项目的web服务器。
三、Nginx服务器
nginx是一款轻量级的web 服务器,反向代理服务器及电子邮件(imap/pop3)代理服务器。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,大部分网站都有使用nginx。
nginx的有点:
- 支持高并发,能够支持高达 50,000 个并发连接数的响应,这样我们的网站并发性就很棒。
- 负载均衡,当访问量还是多的时候,可以同时开启多个应用服务器,进行负责均衡
- 提供静态服务,动静分离,减少静态资源访问对应用服务器的压力
- 反向代理
nginx在部署的时候可以给我的应用服务器,提供一个高并发,高可靠性,安全的网络访问环境,通过Nginx可以接收到用户通过浏览器或者app等前端的方式访问到我们的网站。
注意:这里Nginx只能帮助我们接收客户端(浏览器,app,小程序等)的请求,Nginx并不具备处理请求的能力。例如:用户发送了一个获取用户信息的请求,Nginx并没有用户的信息,所以Nginx并不能直接处理用户的请求,所以Nginx需要将用户的这个请求转发给我们的应用服务器(Flask或者Django程序等),但是,这里注意!注意!注意!,Nginx和我们Web框架(Flask/Django)也不能直接通信,他们的协议不一样(通俗的讲就是一个说英语的,一个说汉语的,谁也听不懂谁),这是就需要找一个翻译,既能读懂Nginx的协议,也能读懂python的web框架协议的,而且还要高效,这个东西就是WSGI。
四、WSGI和uWSGI
WSGI是一种通信协议。WSGI 不是框架,也不是一个模块,而是介于 Web应用程序(Flask/Django)与 Web Server (Nginx)之间交互的一种规范。
uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。Nginx中HttpUwsgiModule的作用是与uWSGI服务器进行交换。
所以我们使用uWSGI充当Nginx和我们的程序(Flask/Django)之间的桥梁,这也就是为什么我们部署python项目需要uWSGI和Nginx的原因了
五、通过Nginx和uWSGi请求响应全过程
标签:
相关文章
最新发布
- 【Python系列】SQLAlchemy 基本介绍
- 【Python】selenium 的EC.presence_of_element_located 和 EC.element_to_be_clickable 的区别
- 从零到一!超详细Pycharm安装教程(图解+详细步骤)
- python json jsonl 的用法
- 【Python篇】深度探索NumPy(下篇):从科学计算到机器学习的高效实战技巧
- boto3:Python连接S3对象存储并进行文件操作(上传、下载、删除)
- 全网最适合入门的面向对象编程教程:50 Python函数方法与接口-接口和抽象基类
- Python pycryptodome类库使用学习总结
- import torch 报错:WinError 126
- 如何在Java中实现邮件发送功能?
点击排行
- 版本匹配指南:Numpy版本和Python版本的对应关系
- Python 可视化 web 神器:streamlit、Gradio、dash、nicegui;低代码 Python Web 框架:PyWebIO
- 版本匹配指南:PyTorch版本、torchvision 版本和Python版本的对应关系
- 相关性分析——Pearson相关系数+热力图(附data和Python完整代码)
- Could not build wheels for llama-cpp-python, which is required to install pyproject.toml-based proj
- Python pyinstaller打包exe最完整教程
- Anaconda版本和Python版本对应关系(持续更新...)
- Python与PyTorch的版本对应