Django + Uwsgi + Nginx 的生产环境部署项目知识点
什么是WSGI:
-
WSGI是一種python專用的web協(xié)議 和http類似
-
WSGI是一種規(guī)范,它定義了使用python編寫的web app(django)與web server(uWSGI)之間接口格式,實(shí)現(xiàn)web app與web server間的解耦。
-
WSGI 沒有官方的實(shí)現(xiàn), 因?yàn)閃SGI更像一個(gè)協(xié)議. 只要遵照這些協(xié)議,WSGI應(yīng)用(Application)都可以在任何服務(wù)器(Server)上運(yùn)行
-
WSGI實(shí)質(zhì):WSGI是一種描述web服務(wù)器(如nginx,uWSGI等服務(wù)器)如何與web應(yīng)用程序(如用Django、Flask框架寫的程序)通信的規(guī)范、協(xié)議。
Web協(xié)議介紹
為什么需要web協(xié)議:
- 不同的框架有不同的開發(fā)方式,但是無論如何,開發(fā)出的應(yīng)用程序都要和服務(wù)器程序配合,才能為用戶提供服務(wù)。
- 這樣,服務(wù)器程序就需要為不同的框架提供不同的支持,只有支持它的服務(wù)器才能被開發(fā)出的應(yīng)用使用,顯然這是不可行的。
- web協(xié)議本質(zhì):就是定義了Web服務(wù)器和Web應(yīng)用程序或框架之間的一種簡(jiǎn)單而通用的接口規(guī)范。
Web協(xié)議出現(xiàn)順序: CGI -> FCGI -> WSGI -> uwsgi
- CGI: 最早的協(xié)議
- FCGI: 比CGI快
- WSGI: Python專用的協(xié)議
- uwsgi: 比FCGI和WSGI都快,是uWSGI項(xiàng)目自有的協(xié)議,主要特征是采用二進(jìn)制來存儲(chǔ)數(shù)據(jù),
- 之前的協(xié)議都是使用字符串,所以在存儲(chǔ)空間和解析速度上,都優(yōu)于字符串型協(xié)議.
uWSGI
- 什么是uWSGI(web服務(wù)器 和nginx類似):
uWSGI是一個(gè)全功能的HTTP服務(wù)器,實(shí)現(xiàn)了WSGI協(xié)議、uwsgi協(xié)議、http協(xié)議等。 - uWSGI作用:
它要做的就是把HTTP協(xié)議轉(zhuǎn)化成語言支持的網(wǎng)絡(luò)協(xié)議,比如把HTTP協(xié)議轉(zhuǎn)化成WSGI協(xié)議,讓Python可以直接使用。 - uWSGI特點(diǎn):
輕量級(jí),易部署,單節(jié)點(diǎn)服務(wù)器的簡(jiǎn)易部署
注:
如果架構(gòu)是Nginx+uWSGI+APP,uWSGI是一個(gè)中間件
如果架構(gòu)是uWSGI+APP,uWSGI是一個(gè)服務(wù)器
Nginx
Nginx是一個(gè)Web服務(wù)器,其中的HTTP服務(wù)器功能和uWSGI功能很類似
Nginx的作用:
- 反向代理,可以攔截一些web攻擊,保護(hù)后端的web服務(wù)器
- 負(fù)載均衡,根據(jù)輪詢算法,分配請(qǐng)求到多節(jié)點(diǎn)web服務(wù)器
- 緩存靜態(tài)資源,加快訪問速度,釋放web服務(wù)器的內(nèi)存占用,專項(xiàng)專用
nginx,uWSGI,WSGI的區(qū)別
nginx和uWSGI區(qū)別
- nginx和uWSGI都是web服務(wù)器,都可以用來部署django等服務(wù)
- nginx:處理靜態(tài)資源能力非常強(qiáng),還可以提供 負(fù)載均衡、反向代理、攻擊攔截等
- uWSGI:單點(diǎn)部署,容易部署,性能差一些,可以支持的web協(xié)議多
uWSGI 和 uwsgi區(qū)別
- uWSGI:是一個(gè)web服務(wù)器
- uwsgi:是一種web協(xié)議
WSGI和uwsgi區(qū)別
- uwsgi: 也是一種web協(xié)議,傳輸快(二進(jìn)制存儲(chǔ),其他web協(xié)議都是字符串存儲(chǔ))
- WSGI: python專業(yè)的web協(xié)議
django+nginx+uwsgi請(qǐng)求處理過程
流程圖
請(qǐng)求處理整體流程
nginx接收到瀏覽器發(fā)送過來的http請(qǐng)求,將包進(jìn)行解析,分析url
靜態(tài)文件請(qǐng)求:
就直接訪問用戶給nginx配置的靜態(tài)文件目錄,直接返回用戶請(qǐng)求的靜態(tài)文件
動(dòng)態(tài)接口請(qǐng)求:
那么nginx就將請(qǐng)求轉(zhuǎn)發(fā)給uWSGI,最后到達(dá)django處理
各模塊作用
- nginx:是對(duì)外的服務(wù)器,外部瀏覽器通過url訪問nginx,nginx主要處理靜態(tài)請(qǐng)求
- uWSGI:是對(duì)內(nèi)的服務(wù)器,主要用來處理動(dòng)態(tài)請(qǐng)求
- uwsgi:是一種web協(xié)議,接收到請(qǐng)求之后將包進(jìn)行處理,處理成wsgi可以接受的格式,并發(fā)給wsgi
- wsgi:是python專用的web協(xié)議,根據(jù)請(qǐng)求調(diào)用應(yīng)用程序(django)的某個(gè)文件,某個(gè)文件的某個(gè)函數(shù)
- django:是真正干活的,查詢數(shù)據(jù)等資源,把處理的結(jié)果再次返回給WSGI, WSGI 將返回值進(jìn)行打包,打包成uwsgi能夠接收的格式
- uwsgi接收wsgi發(fā)送的請(qǐng)求,并轉(zhuǎn)發(fā)給nginx,nginx最終將返回值返回給瀏覽器
為什么使用nginx放在最前面,而不是發(fā)送給uWSGI
- 如果架構(gòu)是Nginx+uWSGI+APP,uWSGI是一個(gè)中間件
- 如果架構(gòu)是uWSGI+APP,uWSGI是一個(gè)服務(wù)器
- uWSGI性能比nginx差一些
- nginx還提供反向代理、負(fù)載均衡、安全攔截等
總結(jié)
以上是生活随笔為你收集整理的Django + Uwsgi + Nginx 的生产环境部署项目知识点的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Celery的简单使用
- 下一篇: Django + Uwsgi + Ngi