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;