nginx相當于是服務器俘种,負責接收請求使鹅,uwsgi是服務器和服務端應用程序的協(xié)議茎用,規(guī)定了怎么把請求轉發(fā)給應用程序和返回
uwsgi是一種線路協(xié)議而不是通信協(xié)議遣总,在此常用于在uWSGI服務器與其他網絡服務器的數據通信
uWSGI是實現(xiàn)了uwsgi和WSGI兩種協(xié)議的Web服務器
uwsgi協(xié)議是一個uWSGI服務器自有的協(xié)議,它與WSGI相比是兩樣東西
WSGI是一種Web服務器網關接口轨功。它是一個Web服務器(如nginx旭斥,uWSGI等服務器)與web應用通信的一種規(guī)范
1首先nginx是對外的服務接口,外部瀏覽器通過url訪問nginx,
2 nginx接收到瀏覽器發(fā)送過來的http請求古涧,將包進行解析垂券,分析url
如果是靜態(tài)文件請求就直接訪問用戶給nginx配置的靜態(tài)文件目錄,直接返回用戶請求的靜態(tài)文件羡滑,
如果不是靜態(tài)文件菇爪,而是一個動態(tài)的請求,那么nginx就將請求轉發(fā)給uwsgi,uwsgi接收到請求之后將包進行處理柒昏,處理成wsgi可以接受的格式凳宙,并發(fā)給wsgi,wsgi根據請求調用應用程序的某個文件,某個文件的某個函數职祷,最后處理完將返回值再次交給wsgi,wsgi將返回值進行打包氏涩,打包成uwsgi能夠接收的格式,uwsgi接收wsgi發(fā)送的請求有梆,并轉發(fā)給nginx,nginx最終將返回值返回給瀏覽器是尖。
3第一級的nginx并不是必須的,uwsgi完全可以完成整個的和瀏覽器交互的流程泥耀,但是要考慮到某些情況
安全問題饺汹,程序不能直接被瀏覽器訪問到,而是通過nginx,nginx只開放某個接口爆袍,uwsgi本身是內網接口首繁,這樣運維人員在nginx上加上安全性的限制作郭,可以達到保護程序的作用。
負載均衡問題弦疮,一個uwsgi很可能不夠用夹攒,即使開了多個work也是不行,畢竟一臺機器的cpu和內存都是有限的胁塞,有了nginx做代理咏尝,一個nginx可以代理多臺uwsgi完成uwsgi的負載均衡。
靜態(tài)文件問題啸罢,用django或是uwsgi這種東西來負責靜態(tài)文件的處理是很浪費的行為编检,而且他們本身對文件的處理也不如nginx好,所以整個靜態(tài)文件的處理都直接由nginx完成扰才,靜態(tài)文件的訪問完全不去經過uwsgi以及其后面的東西