Nginx, WSGI, Django之間的關係

2021-08-28 06:39:50 字數 1517 閱讀 3196

對 nginx,wsgi(或者 uwsgi,uwsgi),django,這幾者的關係一存存在疑惑。通過查閱了些資料,總算把它們的關係理清了。 

總括來說,客戶端從傳送乙個 http 請求到 django處理請求,分別經過了 web伺服器層,wsgi層,web框架層,這三個層次。不同的層次其作用也不同,下面簡要介紹各層的作用。

圖1:web伺服器,web框架與 wsgi 的三層關係

對於傳統的客戶端 - 伺服器架構,其請求的處理過程是,客戶端向伺服器傳送請求,伺服器接收請求並處理請求,然後給客戶端返回響應。在這個過程中,伺服器的作用是:

接收請求

處理請求

返回響應

web伺服器是一類特殊的伺服器,其作用是主要是接收 http 請求並返回響應。提起 web伺服器大家都不會陌生,常見的 web伺服器有 nginx,apache,iis等。在上圖1的三層結構中,web伺服器是最先接收使用者請求的,並將響應結果返回給使用者。

web框架的作用主要是方便我們開發 web應用程式,http請求的動態資料就是由 web框架層來提供的。常見的 web框架有flask,django等,我們以 django框架為例子,展示 web框架的作用:

wsgi 不是伺服器,也不是用於與程式互動的api,更不是真實的**,wsgi 只是一種介面,它只適用於 python 語言,其全稱為 web server gateway inte***ce,定義了 web伺服器和 web應用之間的介面規範。也就是說,只要 web伺服器和 web應用都遵守wsgi協議,那麼 web伺服器和 web應用就可以隨意的組合。

值得指出的是,wsgi 是一種協議,需要區分幾個相近的名詞:

我們基本理清了 wsgi 在 web伺服器與 web框架之間作用:wsgi 就像一條紐帶,將 web伺服器與 web框架連線起來。回到本文的題目,nginx 屬於一種 web伺服器,django屬於一種 web框架,因此,wsgi 與 nginx、django 的作用就不明而喻了。

最後以 nginx,wsgi,django 之間的對話結束本文。 

nginx:hey,wsgi,我剛收到了乙個請求,我需要你作些準備,然後由flask來處理這個請求。 

wsgi:ok,nginx。我會設定好環境變數,然後將這個請求傳遞給flask處理。 

django:thanks wsgi!給我一些時間,我將會把請求的響應返回給你。 

wsgi:alright,那我等你。 

django:okay,我完成了,這裡是請求的響應結果,請求把結果傳遞給nginx。 

wsgi:good job!nginx,這裡是響應結果,已經按照要求給你傳遞回來了。 

nginx:cool,我收到了,我把響應結果返回給客戶端。大家合作愉快~

CGI,FASTcgi,PHP fpm之間的關係

剛開始對這個問題我也挺糾結的,看了 http權威指南 後,感覺清晰了不少。首先,cgi是幹嘛的?cgi是為了保證web server傳遞過來的資料是標準格式的,方便cgi程式的編寫者。web server 比如說nginx 只是內容的分發者。比如,如果請求 index.html,那麼web serv...

配置apache php mysql之間的關係

1 index.php檔案放入 usr local apache2 htdocs 目錄下 其中index.php裡面內容為 phpinfo dbc mysql connect 127.0.0.1 root win2009 if dbc else mysql close dbc2 new mysqli...

usb的endpoint,pipe之間的關係

端點 endpoint 每乙個usb裝置在主機看來就是乙個端點的結合,主機只能通過端點與裝置進行通訊,以使用裝置的功能 每乙個端點實際上就是乙個一定大小的資料緩衝區。管道 pipe 乙個usb管道是驅動程式的乙個資料區緩衝與乙個外設端點的連線,它代表了一種在兩者之間移動資料的能力。一旦裝置被配置,管...