upstream 即上游的意思,是一個想對到概念,從客戶端到中間的網絡鏈路到服務器到鏈路中,能夠將越接近客戶到設備越理解成下游,相反到爲上游,因此若是隻有一個upstream,能夠將其爲理解成轉發客戶到請求到服務器,而後響應服務器轉發到客戶端到過程,源碼主要流程以下:後端
1、建立upstream 緩存
ngx_http_upstream_init服務器
刪除超時定時器網絡
建立到上游到請求socket
掛接一些處理函數,包含第6步中要用到的請求結束後upstream到清理函數
tcp
二、創建與上游的鏈接函數
ngx_http_upstream_connectspa
建立socket、connetion,發起tcp建連請求,使用epoll發送請求,掛接upstream的handler,包括第4、5步中處理上游應答的處理函數內存
三、發送到上游的請求 資源
ngx_http_upstream_send_request
四、處理上游的響應頭
process_header 解析請求頭
ngx_http_upstream_process_headers處理請求頭
五、處理上游的響應體
ngx_http_upstream_process_body_in_memory
若是須要轉發相應體,能夠本身實現input_filter,若不本身實現則使用默認的ngx_http_upstream_non_buffered_filter
(1)upstream與上游之間網速很快時,使用大內存甚至文件,緩存上游大請求
(2)upstream與下游之間網速很快時,使用固定大小內存,不須要過多緩存請求
ngx_http_upstream_send_response中經過判斷
buffering決定走上述的那個流程
6、結束upstream 請求
ngx_http_upstream_cleanup
主要釋放一些upstream使用的資源
傳統方法中經常使用的鉤子:
uscf->peer.init_upstream. 初始化 upstream配置,
在upstream配置初始化過程當中用鉤子us->peer.init初始化請求,
在初始化請求中每每建立請求和upstream的關係,而後用鉤子peer.get定義獲取後端服務器方法等,peer.free與peer.get匹配。