1. 程式人生 > >Django,Nginx和uWSGI關係簡介

Django,Nginx和uWSGI關係簡介

本文主要是介紹Django,Nginx和uWSGI三者在網站中的配合使用以及主要用途。至於一些不常用的使用方法不予以說明。

一、簡介
1. Nginx簡介
Nginx 是一個高效能的HTTP和反向代理伺服器(關於正向代理和方向代理,可參考部落格:https://www.cnblogs.com/Anker/p/6056540.html),也是一個IMAP/POP3/SMTP伺服器。在高連線併發的情況下,Nginx是Apache伺服器不錯的替代品。
Nginx 一般監聽伺服器的80或者443埠(listen 80 就代表監聽80埠),因為一般直接訪問網站都是通過這兩個埠,一臺伺服器可以繫結多個域名,根據不同的域名,Nginx會去找不同的地方去訪問。

Nginx和Apache一般都作為Web伺服器。至於Tomcat,是一個Web應用容器,一般用於執行後臺程式碼。一般來說,使用Nginx或者Apache處理客戶端到伺服器的請求,然後將請求交給Tomcat處理,Tomcat處理後返回資料給Nginx,最後Nginx將客戶端請求的資料發給客戶端。

  1. Django簡介
    Django是一個開放原始碼的Web應用框架,由Python寫成。Django不是一個伺服器,只是一個Web的應用框架。採用了MTV的框架模式,即模型M,模板T和檢視V。

  2. uWSGI簡介
    WSGI是一個Web伺服器,它實現了WSGI協議、uwsgi、http等協議。用於連線Web伺服器和Web應用框架。

wsgi:一種實現python解析的通用介面標準/協議,是一種通用的介面標準或者介面協議,實現了python web程式與伺服器之間互動的通用性。 利用它,web.py或bottle或者django等等的python web開發框架,就可以輕鬆地部署在不同的web server上了;
uwsgi:同WSGI一樣是一種通訊協議。uwsgi協議是一個uWSGI伺服器自有的協議,它用於定義傳輸資訊的型別,它與WSGI相比是兩樣東西。
uWSGI :一種python web server或稱為Server/Gateway 。uWSGI類似tornadoweb或者flup,是一種python web server,uWSGI是實現了uwsgi和WSGI兩種協議的Web伺服器,負責響應python 的web請求。
二、工作原理
1. 如何工作
那麼問題來了,這三者在一起的工作原理是什麼?
1. 一般來說,客戶端發起的http/https請求首先到達了我們的Web伺服器(在這裡我們使用Nginx作為我們的伺服器)。
2. Web伺服器收到請求後,對請求進行解析處理(一般來說如果是靜態請求,直接返回靜態頁面(純HTML頁面)),然後將請求傳送給uWSGI。
3. uWSGI對來自Nginx的請求進行處理,將處理後的結果傳送給Web應用框架(在這裡我們使用Django)。
4. Web應用框架收到請求之後,Web應用對請求進行處理(例如,Django通過某個函式進行處理),將結果返回給uWSGI。
5. uWSGI收到Web應用框架的處理結果後,對該結果進行處理打包,傳送給Web伺服器。
6. Web伺服器將收到的結果返回給客戶端。
這三者之間資訊的傳遞涉及到資料格式以及協議的轉換。

  1. 專案開發
    那麼為什麼我們之前在使用Django開發專案的過程中, 直接使用python manage.py runserver 來執行伺服器,也沒有用到其他兩個,就可以直接通過瀏覽器來訪問?那是因為Django自帶了wsgiref模組,可以作為wsgi伺服器,可以對我們的http請求進行處理,但是效能不好,只能測試的時候用。到了真正部署的時候就要用到uWSGI伺服器(Nginx也不是必須的,只是為了效能和安全方面的考慮,也是為了更好地處理靜態資源)。