Django部署時為什么要用 uWSGI與 Nginx? 以及 WSGI,uwsgi等協議


Django框架的服務器架構一般是 Nginx + uWSGI + Django

 

1 WSGI協議,uwsgi協議

    WSGI協議(通訊協議):Python用於Web開發的協議(用於處理Web服務器和應用程序(APP)的交互信息) (把http通訊的過程抽象出來(請求數據,響應數據的封裝),開發者只負責處理中途的數據) uwsgi協議(傳輸協議,速度很快):uWSGI程序實現的一個自有的協議(采用二進制來存儲數據,之前的協議都是使用字符串,所以在存儲空間和解析速度上,都更快) 注意: WSGI是一種通信協議。 uwsgi是一種線路協議而不是通信協議,在此常用於在uWSGI服務器與其他網絡服務器的數據通信。 

Web框架一般都自帶wsgi服務器 但是性能不好,只作測試用途。(django--wsgiref)

 

2 wsgiref模塊(django 框架自帶)

python提供的,用於測試和學習的簡單的WSGI服務器模塊。

 這個模塊監聽8000端口,把Http請求,根據WSGI協議,轉換application函數中的environ參數,然后調用application函數。 wsgiref會把application函數提供的響應頭設置轉換為HTTP協議的響應頭,把application的返回(return)作為響應體,根據HTTP協議,生成響應,返回給瀏覽器。

 

3 uWSGI服務器

    uWSGI是一個Web服務器,它實現了WSGI協議、uwsgi、http等協議。

 

4.Django 本身提供了runserver,為什么不能用來部署?而是使用nginx+uWSGI部署?

runserver 方法是調試Django 時經常用到的運行方式,它使用Django 自帶的WSGI Server 運行,主要在測試和開發中使用,並且runserver 開啟的方式也是單進程。

uWSGI 是一個Web 服務器,它實現了WSGI 協議(web服務網關接口)、uwsgi(線路協議)、http 等協議。注意uwsgi 是一種通信協議,而uWSGI 是實現uwsgi 協議和WSGI 協議的Web 服務器。uWSGI 具有超快的性能、低內存占用和多app 管理等優點,並且搭配着Nginx 就是一個生產環境了,能夠將用戶訪問請求與應用app 隔離開,實現真正的部署。相比來講,支持的並發量更高,方便管理多進程,發揮多核的優勢,提升性能。

5 為什么要使用Nginx 來做負載均衡?

Nginx 1 安全(Nginx 作為專業服務器,暴露在公網相對比較安全) 2 能更好地處理靜態資源(一些http request header) 3 Nginx也可以緩存一些動態內容Nginx可以更好地配合CDN 4 可以進行多台機器的負載均衡

當然,如果訪問量不大,其實也沒必要加個Nginx,uWSGI足以勝任。

nginx 和uWISG 服務器之間如何配合工作的?
(1)首先瀏覽器發起http 請求到nginx 服務器
(2)Nginx 根據接收到請求包,進行url 分析,判斷訪問的資源類型,如果是靜態資源,直接讀取靜態資源返回給瀏覽器
(3)如果請求的是動態資源就轉交給uwsgi服務器,uwsgi 服務器根據自身的uwsgi 和WSGI 協議,找到對應的Django 框架。
(4)Django 框架下的應用進行邏輯處理后,將返回值發送到uwsgi 服務器,然后uwsgi 服務器再返回給nginx。
(5)最后nginx將返回值返回給瀏覽器進行渲染顯示給用戶。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM