WSGI/uWSGI/uwsgi
- WSGI(Web Server Gateway Interface)
- WSGI,是一個協(xié)議,Python用于Web開發(fā)的協(xié)議:描述web服務(wù)器如何與web應(yīng)用程序(如用Django、Flask框架寫的程序)通信的規(guī)范、協(xié)議。
很多Web框架(如:django)都會自帶WSGI服務(wù)器,但是性能不好,只作測試用途。 - 支持WSGI的服務(wù)器:uWSGI、Gunicorn
- uWSGI
- uWSGI,是一個程序,充當(dāng)Web服務(wù)器或中間件:uWSGI,是一個程序,充當(dāng)Web服務(wù)器或中間件:它實現(xiàn)了WSGI協(xié)議、uwsgi、http等協(xié)議
- 如果架構(gòu)是Nginx+uWSGI+APP,uWSGI是一個中間件
- 如果架構(gòu)是uWSGI+APP,uWSGI是一個服務(wù)器
- uwsgi
- uwsgi,是uWSGI程序?qū)崿F(xiàn)的一個自有的協(xié)議,主要特征是采用二進(jìn)制來存儲數(shù)據(jù),之前的協(xié)議都是使用字符串,所以在存儲空間和解析速度上,都優(yōu)于字符串型協(xié)議.
- Nginx和uWSGI之間可以通過CGI,F(xiàn)CGI和uwsgi協(xié)議通信,當(dāng)然uwsgi的性能是最好的。
Ningx
Ningx是一個反向代理服務(wù)器
- 什么是反向代理?
- 正向代理,例如FQ用的代理服務(wù)器就是正向代理,瀏覽器主動請求代理服務(wù)器,代理服務(wù)器轉(zhuǎn)發(fā)請求到對應(yīng)的目標(biāo)服務(wù)器
- 反向代理,部署在Web服務(wù)器上,代理所有外部網(wǎng)絡(luò)對內(nèi)部網(wǎng)絡(luò)的訪問。瀏覽器訪問服務(wù)器,必須經(jīng)過這個代理,是被動的。
(反向代理監(jiān)聽某個端口,當(dāng)有客戶端連接該端口,反向代理就會處理客戶端的請求。所以客戶端是主動的,反向代理是被動的。) - 正向代理的主動方是客戶端,反向代理的主動方是Web服務(wù)器。
反向代理的作用:
- 安全,客戶端對Web服務(wù)器的訪問需要先經(jīng)過反向代理服務(wù)器。這樣可以防止外部程序?qū)eb服務(wù)器的直接攻擊。
- 負(fù)載均衡,反向代理服務(wù)器可以根據(jù)Web服務(wù)器的負(fù)載情況,動態(tài)地把HTTP請求交給不同的Web服務(wù)器來處理,前提是要有多個Web服務(wù)器。
- 提升Web服務(wù)器的IO性能。一個HTTP請求的數(shù)據(jù),從客戶端傳輸給服務(wù)器,是需要時間的,例如N秒,如果直接傳給Web服務(wù)器,Web服務(wù)器就需要讓一個進(jìn)程阻塞N秒,來接收IO,這樣會降低Web服務(wù)器的性能。如果使用反向代理服務(wù)器,先讓反向代理服務(wù)器接收完整個HTTP請求,再把請求發(fā)給Web服務(wù)器,就能提升Web服務(wù)器的性能。還有一些靜態(tài)文件的請求,可以直接交給反向代理來處理,不需要經(jīng)過Web服務(wù)器。
Nginx+uWSGI關(guān)系
工作原理.png
(中間的反向代理服務(wù)器就是nginx ,右邊的3臺web服務(wù)器就是uWSGI)
- Nginx和uWSGI之間可以通過CGI,F(xiàn)CGI和uwsgi協(xié)議通信,當(dāng)然uwsgi的性能是最好的。
- Nginx和uWSGI,uWSGI和Django,都是通過socket通訊,而通訊的協(xié)議都是使用uwsgi
Nginx和uWSGI的區(qū)別
- nginx是對外的服務(wù)器,外部瀏覽器通過url訪問nginx;uwsgi是對內(nèi)的服務(wù)器,主要用來處理動態(tài)請求。
-
nginx接收到瀏覽器發(fā)送過來的http請求,將包進(jìn)行解析,分析url。
a.如果是靜態(tài)文件請求,就將nginx配置的靜態(tài)文件目錄對應(yīng)的靜態(tài)文件,直接返回給用戶
b.如果不是靜態(tài)文件,而是一個動態(tài)的請求,那么nginx就將請求轉(zhuǎn)發(fā)給uwsgi,
uwsgi接收到請求之后將包進(jìn)行處理,處理成wsgi可以接受的格式,并發(fā)給wsgi,wsgi根據(jù)請求調(diào)用應(yīng)用程序的某個文件,某個文件的某個函數(shù),
最后處理完將返回值再次交給wsgi,wsgi將返回值進(jìn)行打包,打包成uwsgi能夠接收的格式,uwsgi接收wsgi發(fā)送的請求,并轉(zhuǎn)發(fā)給nginx,nginx最終將返回值返回給瀏覽器。
gong.png
參考網(wǎng)址
https://blog.csdn.net/dqchouyang/article/details/81639788
https://www.cnblogs.com/gugubeng/p/9722937.html
https://www.cnblogs.com/Xjng/p/aa4dd23918359c6414d54e4b972e9081.html