什麼是WSGI(WSGI是一種python專用的web協議 和http類似):
- WSGI是一種規範,它定義了使用python編寫的web app(django)與web server(uWSGI)之間接口格式,實現web app與web server間的解耦。
- WSGI 沒有官方的實現, 因爲WSGI更像一個協議. 只要遵照這些協議,WSGI應用(Application)都可以在任何服務器(Server)上運行
- WSGI實質:WSGI是一種描述web服務器(如nginx,uWSGI等服務器)如何與web應用程序(如用Django、Flask框架寫的程序)通信的規範、協議。
爲什麼需要web協議:
- 不同的框架有不同的開發方式,但是無論如何,開發出的應用程序都要和服務器程序配合,才能爲用戶提供服務。
- 這樣,服務器程序就需要爲不同的框架提供不同的支持,只有支持它的服務器才能被開發出的應用使用,顯然這是不可行的。
- web協議本質:就是定義了Web服務器和Web應用程序或框架之間的一種簡單而通用的接口規範。
Web協議介紹
Web協議出現順序: CGI -> FCGI -> WSGI -> uwsgi
- CGI: 最早的協議
- FCGI: 比CGI快
- WSGI: Python專用的協議
- uwsgi: 比FCGI和WSGI都快,是uWSGI項目自有的協議,主要特徵是採用二進制來存儲數據,
- 之前的協議都是使用字符串,所以在存儲空間和解析速度上,都優於字符串型協議.
uWSGI(web服務器 和nginx類似)
- 什麼是uWSGI:
uWSGI是一個全功能的HTTP服務器,實現了WSGI協議、uwsgi協議、http協議等。 - uWSGI作用:
它要做的就是把HTTP協議轉化成語言支持的網絡協議,比如把HTTP協議轉化成WSGI協議,讓Python可以直接使用。 - uWSGI特點:
輕量級,易部署,性能比nginx差很多
注:
如果架構是Nginx+uWSGI+APP,uWSGI是一箇中間件
如果架構是uWSGI+APP,uWSGI是一個服務器
Nginx
- Nginx是一個Web服務器,其中的HTTP服務器功能和uWSGI功能很類似
- 但是Nginx還可以用作更多用途,比如最常用的反向代理、負載均衡、攔截攻擊等,而且性能極高
Django
- Django是一個Web框架,框架的作用在於處理request和 reponse,其他的不是框架所關心的內容。
- 所以如何部署Django不是Django所需要關心的。
nginx,uWSGI,WSGI的區別
nginx和uWSGI區別
- nginx和uWSGI都是web服務器,都可以用來部署django等服務
- nginx:處理靜態資源能力非常強,還可以提供 負載均衡、反向代理、攻擊攔截等
- uWSGI:單點部署,容易部署,性能差一些,可以支持的web協議多
uWSGI 和 uwsgi區別
- uWSGI:是一個web服務器
- uwsgi:是一種web協議
WSGI和uwsgi區別
- uwsgi: 也是一種web協議,傳輸快(二進制存儲,其他web協議都是字符串存儲)
- WSGI: python專業的web協議
django+nginx+uwsgi請求處理過程
流程圖
請求處理整體流程
nginx接收到瀏覽器發送過來的http請求,將包進行解析,分析url
靜態文件請求:
就直接訪問用戶給nginx配置的靜態文件目錄,直接返回用戶請求的靜態文件
動態接口請求:
那麼nginx就將請求轉發給uWSGI,最後到達django處理
各模塊作用
- nginx:是對外的服務器,外部瀏覽器通過url訪問nginx,nginx主要處理靜態請求
- uWSGI:是對內的服務器,主要用來處理動態請求
- uwsgi:是一種web協議,接收到請求之後將包進行處理,處理成wsgi可以接受的格式,併發給wsgi
- wsgi:是python專用的web協議,根據請求調用應用程序(django)的某個文件,某個文件的某個函數
- django:是真正幹活的,查詢數據等資源,把處理的結果再次返回給WSGI, WSGI 將返回值進行打包,打包成uwsgi能夠接收的格式
- uwsgi接收wsgi發送的請求,並轉發給nginx,nginx最終將返回值返回給瀏覽器
爲什麼使用nginx放在最前面,而不是發送給uWSGI
- 如果架構是Nginx+uWSGI+APP,uWSGI是一箇中間件
- 如果架構是uWSGI+APP,uWSGI是一個服務器
- uWSGI性能比nginx差一些
- nginx還提供反向代理、負載均衡、安全攔截等A