0.1 Django + Uwsgi + Nginx 的生產環境部署之理論篇
Django + Uwsgi + Nginx 的生產環境部署
參考文件:
- wsgi詳解:https://blog.csdn.net/li_101357/article/details/52748323
- wsgi協議介紹(萌新版):https://blog.csdn.net/j163you/article/details/80919360
- 廖雪峰web程式設計講解:https://www.liaoxuefeng.com/wiki/897692888725344/923057027806560
一、重要概念
1. web容器
-
作用(處理請求,返回資料)
- 第一,幫助django服務端處理客戶端連線,官方號稱可以處理10萬(實現高併發
- 第二,幫助處理靜態資源請求(html、css、JS),返回給客戶端瀏覽器(django等web伺服器處理靜態資源能力差)
-
常見web容器
-
nginx
- LNMP
- L:LInux
- N:Nginx
- M:MySQL
- P: php
- LNMP
-
apache(PHP)
- LAMP
- L:LInux
- A:Apache
- M:MySQL
- P: php
-
Tomcat(JAVE)
-
2. 什麼是WSGI(WSGI是一種python專用的web協議和http類似):
什麼是WSGI(web協議)
- WSGI是一種 python專用 的web協議 和http類似。
- WSGI實質:WSGI是一種描述web伺服器(如nginx,uWSGI等伺服器)如何與web應用程式(如用Django、Flask框架寫的程式)通訊的規範、協議。
- WSGI定義了使用python編寫的web app(django)與web server(uWSGI)之間介面格式。
為什麼需要web協議:
- 不同的框架有不同的開發方式,但是無論如何,開發出的應用程式都要和伺服器程式配合,才能為使用者提供服務。
- 這樣,伺服器程式就需要為不同的框架提供不同的支援,只有支援它的伺服器才能被開發出的應用使用,顯然這是不可行的。
- web協議本質:就是定義了Web伺服器和Web應用程式或框架之間的一種簡單而通用的介面規範。
Web協議介紹
- Web協議出現順序: CGI -> FCGI -> WSGI -> uwsgi
- CGI: 最早的協議
- FCGI: 比CGI快
- WSGI: Python專用的協議
- uwsgi:比FCGI和WSGI都快,是uWSGI專案自有的協議,主要特徵是採用二進位制來儲存資料,之前的協議都是使用字串,所以在儲存空間和解析速度上,都優於字串型協議.
3. uWSGI(web伺服器 和nginx類似)
什麼是uWSGI:
- uWSGI是一個全功能的HTTP伺服器,實現了WSGI協議、uwsgi協議、http協議等。
uWSGI作用:
- 它要做的就是把HTTP協議轉化成語言支援的網路協議,比如把
HTTP協議轉化成WSGI協議,讓Python可以直接使用
。
uWSGI特點:
-
輕量級,易部署,效能比nginx差很多
-
注:
- 如果架構是Nginx+uWSGI+APP,uWSGI是一箇中間件
- 如果架構是uWSGI+APP,uWSGI是一個伺服器
4. Nginx
nginx原理及常用配置:https://www.cnblogs.com/xiaonq/p/10468998.html
- Nginx是一個Web伺服器,其中的HTTP伺服器功能和
uWSGI功能很類似
- 但是Nginx還可以用作更多用途,比如最常用的
反向代理、負載均衡、攔截攻擊
等,而且效能極高
5. Django
- Django是一個Web框架,框架的作用在於處理request和 reponse,其他的不是框架所關心的內容。
- 所以如何部署Django不是Django所需要關心的。
二、nginx+uwsgi+django部署各模組作用
1. Django + Uwsgi + Nginx方案
1)請求處理整體流程
-
nginx接收到瀏覽器傳送過來的http請求,將包進行解析,分析url
-
靜態檔案請求:就直接訪問使用者給nginx配置的靜態檔案目錄,直接返回使用者請求的靜態檔案
-
動態介面請求:那麼nginx就將請求轉發給uWSGI,最後到達django處理
2)各模組作用
1. nginx:是對外的伺服器,外部瀏覽器通過url訪問nginx,nginx主要處理靜態請求
2. uWSGI:是對內的伺服器,主要用來處理動態請求
3. uwsgi:是一種web協議,接收到請求之後將包進行處理,處理成wsgi可以接受的格式,併發給wsgi
4. wsgi:是python專用的web協議,根據請求呼叫應用程式(django)的某個檔案,某個檔案的某個函式
5. jango:是真正幹活的,查詢資料等資源,把處理的結果再次返回給WSGI, WSGI 將返回值進行打包,打包成uwsgi能夠接收的格式
6. uwsgi接收wsgi傳送的請求,並轉發給nginx,nginx最終將返回值返回給瀏覽器
2、Django + uwsgi方案
1. 沒有nginx而只有uwsgi的伺服器,則是Internet請求直接由uwsgi處理,並反饋到web專案中。
2. nginx可以實現安全過濾,防DDOS等保護安全的操作,並且如果配置了多臺伺服器,nginx可以保證伺服器的負載相對均衡。
3. 而uwsgi則是一個web伺服器,實現了WSGI協議(Web Server Gateway Interface),http協議等,它可以接收和處理請求,發出響應等。
只用uwsgi也是可以的。
3. nginx和uWSGI特點
1.nginx的作用
- 反向代理,可以攔截一些web攻擊,保護後端的web伺服器
- 負載均衡,根據輪詢演算法,分配請求到多節點web伺服器
- 快取靜態資源,加快訪問速度,釋放web伺服器的記憶體佔用,專項專用
2. uWSGI的適用
- 單節點伺服器的簡易部署
- 輕量級,好部署