nginx源碼中upstream的主要流程


upstream 即上游的意思,是一個想對到概念,從客戶端到中間的網絡鏈路到服務器到鏈路中,可以將越接近客戶到設備越理解成下游,相反到為上游,所以如果只有一個upstream,可以將其為理解成轉發客戶到請求到服務器,然后響應服務器轉發到客戶端到過程,源碼主要流程如下:

 

配置解析:

ngx_http_upstream_commands

ngx_http_upstream_init_round_robin  中peer構造

 

1、創建upstream           

ngx_http_upstream_init

  刪除超時定時器

  創建到上游到請求

  掛接一些處理函數,包含第6步中要用到的請求結束后upstream到清理函數

 

2、建立與上游的連接

ngx_http_upstream_connect

    創建socket、connetion,發起tcp建連請求,使用epoll發送請求,掛接upstream的handler,包括第4、5步中處理上游應答的處理函數

 

3、發送到上游的請求 

ngx_http_upstream_send_request

4、處理上游的響應頭

process_header 解析請求頭

ngx_http_upstream_process_headers處理請求頭

 

5、處理上游的響應體

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匹配。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM