参考:
- cgi、wsgi、uwsgi 与 uWSGI都是啥?
- 做python Web开发你要理解:WSGI & uwsgi
- python 使用Nginx和uWSGI来运行Python应用
- uwsgi、wsgi和nginx的区别和关系
一、基本概念
1. wsgi: (the Python Web Server GateWay Interface
) 是一种通信协议
python web框架编写的应用程序
<==>后端服务器
之间的通信规范.- PEP 3333中描述了
web server
如何与web application
通信的规范- 要实现wsgi协议,必须同时实现
web server
和web application
- 当前运行在
WSGI
协议之上的web
框架有Bottle
,Flask
,Django
2. uwsgi: 是一种线路协议
- 与wsgi是两种东西,是
uWSGI服务器
的独占协议
3. uWSGI: 是一个web服务器
的名字
- uWSGI旨在为部署分布式集群的网络应用开发一套完整的解决方案
- 主要面向web及其标准服务。由于其
可扩展性
,能够被无限制的扩展用来支持更多平台
和多语言
- 实现了
WSGI协议
、uwsgi协议
等uWSGI服务器
自己实现了基于uwsgi协议的server部分
,我们只需要在uwsgi的配置文件中指定application的地址
,uWSGI就能直接和应用框架中的WSGI application
通信。- uWSGI的主要特点是:
- 超快的
性能
低内存
占用多app
管理- 详尽的
日志功能
(可以用来分析app的性能和瓶颈)高度可定制
(内存大小限制,服务一定次数后重启等)
4. Apache: 世界使用排名第一的Web服务器
5. Nginx: 轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器
Apache与Nginx的优缺点比较
二、Nginx + uWSGI 部署Flask及分析
1. 整体部署架构:
2. Why需要Nginx?
- 如果普通的个人网站,如果访问量不大,可以有
uWSGI
+Python Web app
构成- 访问量过大,请求连接则需要长时间等待,出现了
分布式服务器
--几台web服务器一起处理请求- Nginx就是来分配
客户端的请求连接
和web服务器
的----Nginx的反向代理
功能
可以参考我的另一篇博客:Nginx正向代理和反向代理(未完成)
未完....
三、wsgi简析 & 简单的wsgi实现
wsgi接口定义很简单,只要求Web开发者实现一个函数,来相应Http请求
def application(environ, start_response):
start_response('200 OK', [('Content-Type', 'text/html')])
return '<h1>Hello, web!</h1>'
上面的
application()
函数就是符合WSGI标准的一个HTTP处理函数,它接收两个参数:
environ
:一个包含所有HTTP请求信息的dict对象;
start_response
:一个发送HTTP响应的函数。
application()
函数必须由WSGI服务器来调用
Python内置了一个WSGI服务器,这个模块叫wsgiref
是用纯Python编写的WSGI服务器的参考实现--完全符合WSGI标准,但是不考虑任何运行效率,仅供开发和测试使用
未完...