摘自: http://blog.csdn.net/xiajun07061225/article/details/9189505 江雨煙雲的部落格 ngx_http_request_s是nginx中非常重要的一個結構體,貫穿整個過程中。 下面解釋了ngx_http_request_s結構體中與HTTP框架相關的重要的成員變數。 [cpp] view plain copy print? struct ngx_http_request_s { signature; /* "HTTP" */ ngx_connection_t 🎜> //指向存放所有HTTP模組的情境結構體的指標陣列 **ctx; //指向請求對應的存放main層級配置結構體的指標陣列 void >//指向請求對應的存放srv層級配置結構體的指標數組 void _conf; //指向請求對應的存放loc等級配置結構體的指標陣列 **loc_conf; /*接收完http頭部,第一次在業務上處理http請求時,http框架提供的處理方法是ngx_http_process_request。 但如果該方法無法一次處理完該請求的全部業務,在歸還控制權到epoll時間模組後,該請求再次被回調時, 將透過Ngx_http_request_handler方法處理,而這個方法中可讀事件的處理就是呼叫read_event_handler處理請求。 也就是說,http模組希望在底層處理請求的讀取事件時,重新實作read_event_handler方法 */ //與以上的方法類似 ngx_http_event_handler_pt 🎜> #if (NGX_HTTP_CACHE) *cache; #endif ngx_http_upstream_t ngx_array_t *upstream_states; /* of ngx_http_upstream_state_t */ 記憶體池 ngx_pool_t //用於接收http請求內容的緩衝區,主要接收http頭部 ngx_ in; //ngx_http_process_request_headers在接收、解析完http請求的頭部後,會把解析完的每一個http頭部加入到headers_in的headers鍊錶中,同時會同時會出現在中的構造下的建構體其他會員 ngx_http_headers_in_ 🎜> //http模組會把想要送的http對應資料放到headers_out中,預期http框架將headers_out中的成員序列化為http回應套件傳送給使用者 headers_out; //接收中包體的資料結構 ngx_http_request_body_t *request_body; //延遲關閉連線的時間 time_t lingering_time; //目前要求初始化時的時間 time_t ngx_msec_t //下面的9個成員是函數ngx_http_process_request_line方法在接收、解析http請求行時解析出的資訊 ngx_uint_t 以來與選擇🎜> ngx_uint_t http_version; quest_line; ngx_str_t 使用者請求中的uri ngx_str_t 🎜>//使用者請求中的url參數 ngx_str_t 🎜> ngx_str_t 🎜>//沒有URL解碼的原始請求 //使用者要求中的方法名稱字串 ngx_str col;//其data成員指向請求中http起始位址 out中保存著由headers_out中序列化後的表示http頭部的TCP流。 * 在呼叫ngx_http_output_filter方法後,out中還會儲存待傳送的http包體,它是實現非同步發送回應的關鍵。 */ ngx_chain_t 🎜> /*目前請求既有可能是使用者發出的請求,也可能是派生出的子請求。 * 而main標識一系列相關的派生子請求的原始請求。 * 一般可透過main和目前請求的位址是否相等來判斷目前請求是否為使用者發送的原始請求。*/ ngx_http_request_t 🎜> //目前請求的父親請求(不一定是原始請求) ngx_http_request_t 🎜> //與subrequest子請求相關的功能 ngx_http_postponed_request_t ngx_http_post_subrequest_t *post_subrequest; //所有的子請求都是透過這個單鍊錶連結起來的 /*一個全域的ngx_http_phase_engler_http_phase_engler_http_phase_engler)。 * 而phase_handler成員與該陣列搭配使用。表示下次應執行phase_handler作為序號指定的陣列中的回呼方法*/ phase_handler; //表示NGX_HTTP_CONTENT_PHASE階段提供給http模組處理請求的一種方式,它指向http模組實現的請求處理方法 ngx_http_handler_pt content_handler; ngx_uint_t 🎜> ngx_http_variable_value_t ngx_http_variable_value_t ng變項; #if (NGX_ 🎜> ngx_uint_t 以來化中; *captures_data; #endif size_t 🎜> /* 學習不含標頭的Apache 相容於回應長度*/ //http要求的全部長度,包含http包體 > off_t 🎜> ngx_uint_t ngx_http_connection_t *http_connection 🎜> ngx_http_spdy_stream_t *spdy_stream; ngx_http_log_handler_pt log_handler; //在這個請求中如果打開了某一些資源,並需要在請求結束時釋放,那麼需要將定義的釋放資源的方法加入到該成員 ; 未簽署 //引用計數在這個請求的原始請求上的一般作用 //引用計數,每當原始派生出子請求時,計數的請求成員都會加一 unsigned //阻止標誌位,目前僅由aio使用 unsigned 🎜> //標誌位:為1表示蛋清請求正在使用非同步IO unsigned unsigned 🎜> /* URI with "/." and on Win32 with "//" */ unsigned /* URI with "%" */ /* URI with "+" */ /* 🎜> unsigned 🎜> unsigned > unsigned 🎜> unsigned unsigned valid_unparsed_uri:1; unsigned 🎜>//表示使用rewrite重寫URL的次數 unsigned 🎜> unsigned unsigned request_body_in_file_only:1; 未簽名 未簽章 request_body_in_clean_file:1) request_body_file_group_access:1; 未簽名 未簽署 🎜> 未簽名 🎜> #if (NGX_HTTP_CACHE) 未簽署 🎜> #endif #if (NGX_HTTP_GZIP)#if (NGX_HTTP_GZIP) #if (NGX_HTTP_GZIP) 未簽名 gzip gzip_ok:1; #endif 未簽署 未簽名 no_cache: 🎜> /* * ngx_http_limit_conn_module 與 ngx_http_limit_req_module 🎜> */ limit_conn_set: 1; 無符號 limit_req_set:1) >#if 0 unsigned 🎜> unsigned unsigned chunked:1; //標誌位,並為1表示當前請求時keepalive請求 //延遲關閉標示位 //標記位:為1表示正在丟棄http請求中的包體 unsigned dis中使用:為1表示請求的當前狀態是在做內部跳轉 unsigned unsigned error_page:1; ignore_content_encoding:1 ; unsigned > unsigned request_complete: 1; unsigned 🎜> //標誌位:為1表示發生給客戶端的http回應頭已經寄 unsigned unsigned unsigned unsigned logged:1; //標記位,表示緩衝中是否有待寄送內容 unsigned main_filter_need_in_memory:1; unsigned filter_need_in_memory:1; unsigned filter_need_temporary:1; allow_ranges:1; unsigned t_reading:1; unsigned > #endif >/* used to parse HTTP headers */ 分析http時使用state來表示目前的解析狀態,需要檢查是否構成完成的http請求行 state; ngx_uint_t header_hash; ngx_uint_t lowcase_index; u_char lowcase_header[NGX_HTTP_LC_HEADER_LEN]; u_ *header_name_end; u_char u_char *header_end; /* * 透過 ngx_http_ephemeral_t u_char u_char *uri_ext; u_char u_char *request_start; u_char u_char *schema_start; u_char *host_end; u_char ¢ 🎜> 未簽名 未簽章 http_major:16; 以上就介紹了Nginx學習之三-ngx_http_request_t結構體,包括了方面的內容,希望對PHP教程有興趣的朋友得到幫助。