1 首先nginx 是對外的服務(wù)接口泳桦,外部瀏覽器通過url訪問nginx,
2nginx 接收到瀏覽器發(fā)送過來的http請求汤徽,將包進行解析,分析url灸撰,如果是靜態(tài)文件請求就直接訪問用戶給nginx配置的靜態(tài)文件目錄谒府,直接返回用戶請求的靜態(tài)文件,
? 如果不是靜態(tài)文件浮毯,而是一個動態(tài)的請求完疫,那么nginx就將請求轉(zhuǎn)發(fā)給uwsgi,uwsgi 接收到請求之后將包進行處理,處理成wsgi可以接受的格式债蓝,并發(fā)給wsgi,wsgi 根據(jù)請求調(diào)用應(yīng)用程序的某個文件壳鹤,某個文件的某個函數(shù),最后處理完將返回值再次交給wsgi,wsgi將返回值進行打包饰迹,打包成uwsgi能夠接收的格式芳誓,uwsgi接收wsgi 發(fā)送的請求,并轉(zhuǎn)發(fā)給nginx,nginx最終將返回值返回給瀏覽器啊鸭。
3要知道第一級的nginx并不是必須的兆沙,uwsgi完全可以完成整個的和瀏覽器交互的流程,但是要考慮到某些情況
? 1 安全問題莉掂,程序不能直接被瀏覽器訪問到葛圃,而是通過nginx,nginx只開放某個接口,uwsgi本身是內(nèi)網(wǎng)接口憎妙,這樣運維人員在nginx上加上安全性的限制库正,可以達到保護程序的作用。
? 2負載均衡問題厘唾,一個uwsgi很可能不夠用褥符,即使開了多個work也是不行,畢竟一臺機器的cpu和內(nèi)存都是有限的抚垃,有了nginx做代理喷楣,一個nginx可以代理多臺uwsgi完成uwsgi的負載均衡趟大。
? 3靜態(tài)文件問題,用django或是uwsgi這種東西來負責(zé)靜態(tài)文件的處理是很浪費的行為铣焊,而且他們本身對文件的處理也不如nginx好逊朽,所以整個靜態(tài)文件的處理都直接由nginx完成,靜態(tài)文件的訪問完全不去經(jīng)過uwsgi以及其后面的東西曲伊。