关于Web服务器和应用服务器
基本概念:
- Web服务器主要功能就是存储、处理、传递网页,客户端和服务器之间基于HTTP协议进行通信。
- 应用服务器主要是处理动态请求,调用相应的对象完成对请求的处理,返回响应的结果。
两者之间的区别:
- Web服务器主要是以HTTP为核心,WEB UI为向导的应用,处理一些静态请求。
- 应用服务器虽然也支持HTTP协议,但应用服务器可以通过很多协议为应用程序提供商业逻辑。
Python项目部署架构
在我们平时搭建一个Python Web项目时,比如Django框架的项目,这时候常见的服务端架构:
- Nginx服务器作为代理服务器,代理处理静态资源(js,css,图片)请求,以及动态请求(增删改查)转发以及返回处理结果。
- uWSGI服务器负责接受N本文来源gao.dai.ma.com搞@代*码(网$ginx服务器,处理过后转发给Django应用,接受Django应用处理返回的信息,在转发给nginx
- Django应用从uWSGI服务器接收请求,调用相应的业务逻辑,处理数据渲染相应的页面并且返回给uWSGI服务器。
关于cgi、wsgi、uwsgi、http协议
接下来针对上文提到Django项目部署架构,聊聊这几个协议在这过程中的作用:
- http协议:客户端程序和Nginx服务器通信就是基于http协议,而Nginx服务器作为一个代理服务器,会根据HTTP请求返回静态资源还是转发动态请求。
- cgi协议:cgi协议是外部应用程序和Web服务器之间的接口标准,简而言之,就是规定如何让一个程序与Web服务器程序之间通信。
- wsgi协议:基于现存的CGI标准设计,一个Python web框架编写的应用程序和Web服务器之间通信的规范。
- uwsgi:uWSGI服务器独有的协议,用于uWSGI服务器和其他Web服务器之间的数据通信
关于cgi、fastcgi、php-fpm、FastCGI(额外)
- CGI:是 Web Server 与 Web Application 之间数据交换的一种协议。
- FastCGI:同 CGI,是一种通信协议,但比 CGI 在效率上做了一些优化。同样,SCGI 协议与 FastCGI 类似。
- PHP-CGI:是 PHP (Web Application)对 Web Server 提供的 CGI 协议的接口程序。
- PHP-FPM:是 PHP(Web Application)对 Web Server 提供的 FastCGI 协议的接口程序,额外还提供了相对智能一些任务管理。
关于uWSGI、Nginx服务器
简单来讲,uWSGI也是一个Web服务器,他虽然同时实现了http、uwsgi、wsgi协议,但是更多被作为应用服务器和应用程序之间进行通信。
那么这里就有个疑问了,为什么uWSGI都能直接处理http请求了,还需要Nginx服务器?这样处理有几点原因:
- 首先Nginx服务器在这过程中属于代理服务器的角色,每当一个http请求进来,就需要经过Nginx服务器,而Nginx服务器的优势就在于异步非阻塞的网络模型,它能够在单线程的情况下处理大量的请求,针对处理静态资源请求;而对于动态请求,能够通过缓存的功能,并且配合CDN进行优化,这样能够极大降低系统的负载,降低客户端响应时间。
- 其次,Nginx服务器能够进行负载均衡,启用多个后端服务器,通过Nginx对HTTP请求进行分配,这样能够极大优化架构的效率,提高处理的性能。
- 最后,Nginx有很多模块支持一些比如白名单,黑名单功能,并且配合keepalive实现高可用的架构.
总而言之,Nginx服务器在处理http请求上,都有着uWSGI没有的优势,所以在日常部署环境中,经常会使用到Nginx+uWSGI。