web应用层详解part3----部署Python程序
web应用层详解part3----部署Python程序
一个协议至少有两方去遵守,以协议作为点,有上游和下游。
在web应用层,建议当一个nginx当做上游,作为上游时支持的协议有三种并支持三种nginx的转发指令:proxy_pass http:// (转发http协议)、fastcgi_pass (转发fastcgi协议)、uwsgi_pass (转发uwsgi协议)。在web层最上游就是nginx了,用这三种协议往下转发数据包。
python写出的web程序就分为两部分:web服务+web应用。
服务于应用之间的协议:wsgi、asgi
wsgi:Web Server Gateway Interface,web服务器网关接口,本质就是对http协议的进一步封装,用于在web服务器于web应用之间的一种通信规范。
asgi:Asynchronous Server Gateway Interface,这是wsgi的异步版本,性能更强,功能更多。
服务有两个:
uwsgi:往下游app发的是wsgi协议
daphne:往下游app发的是asgi协议
服务的上游:
uwsgi服务:支持上游的uwsgi协议、http协议
python服务uwsgi:
对下游:wsgi协议
对上游:http协议(可以直接被浏览器访问)、uwsgi协议
python服务daphne:
对下游:asgi协议
对上游:http协议(可以直接被浏览器访问)
php服务php-fpm:
对下游:无协议
对上游:fastcgi协议,不支持http协议(不能直接用浏览器访问)
建议方案:
在web层上最上游挡一个nginx服务,然后nginx服务代理着uwsgi,uwsgi服务再负责拉起python应用程序。
七层负载均衡--------web层(nginx服务(uwsgi_pass)----uwsgi协议----uwsgi服务(监听uwsgi协议)----wsgi协议---->python应用程序)
uwsgi服务怎么控制监听什么协议?(针对上游)
uwsgi服务的配置文件:uwsgi.ini
http : 代表监听http协议端口,针对这个在nginx配置里需要用proxy_pass
socket : 代表监听uwsgi协议的端口,针对这个在nginx配置里需要有uwsgi_pass。(建议该方案,因为速度更快)
proxy_pass:http协议 fastcgi_pass:fastcgi协议 uwsgi_pass:uwsgi协议 强调: 1、uwsgi服务的配置文件uwsgi.ini http = :8080 代表uwsgi服务监听http协议端口 socket = :8080 代表uwsgi服务监听uwsgi协议的端口 针对前者,在nginx里需要用proxy_pass转发 针对后者,在nginx里需要用uwsgi_pass转发 2、uwsgi协议肯定http协议更快 3、针对python体系-asgi协议,nginx配置转发给daphne服务,用的就是proxy_pass, 因为daphne支持的http协议,没有asgi_pass这种东西