ngx_http_create_request函數解析

ngx_http_request_t是一個重要的結構體,每一個http請求都會有自己的ngx_http_request_t結構,ngx_http_create_request函數初始化了一個ngx_http_request_t結構。主要代碼和解析如下。


ngx_connection_t結構中的requests字段代表了某一個連接處理的請求個數,如果在長連接模式下,一個連接可能會處理若干個請求。在配置文件中指定的log_format中添加$connection_requests字段,就是由這個變量獲取到的結果。

c->requests++;

ngx_http_request_t結構中main變量作用於當請求派生了子請求時,子請求又可能有自己的子請求,但是不管怎麼派生,他們的main變量都是輩分最高的那一個請求。

r->main = r;

count變量作用於當請求派生出其他請求時,包括子請求,內部重定向,upstream等等。每次派生出一個請求,count值就會加一。

r->count = 1;

us_tries變量作用於當請求要經歷upstream過程時。假設upstream塊中配置了n個host,如果第一個host沒有連接成功,會執行ngx_http_upstream_next函數,也即嘗試連接下一個host。us_tries變量每次會加一,與配置文件中配置的次數限制做對比。

r->us_tries = 1;

請求開始計時,如果log_format中指定打印$request_time,在請求結束之後,再記錄時間,兩個時間的差值就是$request_time的值。

if (clcf->request_time_cache) {
    tp = ngx_timeofday();
    r->start_sec = tp->sec;
    r->start_msec = tp->msec;
    r->start_usec = tp->usec;
} else {
    ngx_gettimeofday(&tv);
    r->start_sec = tv.tv_sec;
    r->start_msec = tv.tv_usec / 1000;
    r->start_usec = tv.tv_usec % 1000;
}

uri_changes變量作用於當uri發生變化的時候,包括內部重定向,rewrite。默認初始化爲11,每次發生變化都會減一,也即最多變10次,防止無限的重定向或者無限的rewrite死循環這種現象。

r->uri_changes = NGX_HTTP_MAX_URI_CHANGES + 1;

請求有可能派生子請求,但是每個請求派生出來的子請求的個數有限制,默認爲200個子請求。每次新生成一個子請求,都會加一,每次一個子請求完結,都會減一。

r->subrequests = NGX_HTTP_MAX_SUBREQUESTS + 1;



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章