nginx 代理請求流程
1.當HTTP請求交給Nginx處理時,首先Nginx會取出header頭中的Host (此處也就是 www.baidu.com),然后將其與所有的配置文件中的每個server段中的server_name進行匹配,以此 決定到底有哪個server塊來處理這個請求。(當然有時也可能一個Host與多個server塊中的server_name都匹配,這時會根據匹配的優先級選擇實際處理的server塊,優先級這里就不再細說。)
2.此時我們可以看出HTTP請求匹配到了截圖中的server_name,這樣接下來nginx就會根據header中的Request URI字段進行與location匹配,如上面配置文件的截圖所示,匹配到了 location / 。
3.接下來繼續由nginx處理可以看到 proxy _pass http://rocdn ; 這就是進行反向代理處理,這個例子中使用的是nginx的upstream模塊進行反向代理實現。
4.通過proxy _pass http://rocdn ; 中的 rocdn 可以找到對應的upstream塊,然后,可以根據其中的server 115.239.210.27:80;再次進行代理請求,
此時發送的GET包內容:Host字段 and Request URI字段 都和上面一樣,
5.當代理HTTP請求到達 百度的服務器:115.239.210.27后,若百度也是nginx,則服務器會對其進行類似上面的nginx處理HTTP請求一樣,進行server_name 和 location匹配,並將相應的請求資源返回代理服務器。
6.Nginx反向代理服務器接收到百度服務器的返回資源后,再將其返回給客戶端瀏覽器。
生產環境:Linux+Nginx+uWSGI+Django
1、首先客戶端請求服務資源,
2、Nginx作為直接對外的服務接口,接收到客戶端發送過來的http請求,會解包、分析,
如果是靜態文件請求就根據nginx配置的靜態文件目錄,返回請求的資源,
如果是動態的請求,nginx就通過配置文件,將請求傳遞給uWSGI;
3、uWSGI 將接收到的包進行處理,並轉發給wsgi,
4、wsgi根據請求調用django工程的某個文件或函數,處理完后django將返回值交給wsgi,
5、wsgi將返回值進行打包,轉發給uWSGI,
6、uWSGI接收后轉發給nginx,nginx最終將返回值返回給客戶端(如瀏覽器)。