リクエストヘッダ
conf->ヘッダなど>ハッシュ
ヘッダフィールドproxy_set_header命令セットを、フィールド指定ngx_http_proxy_headers構造ヘッダフィールドのハッシュテーブルルックアップを形成しました。双方の紛争の内容がproxy_set_headerする場合は勝ちます。カスタマイズセクションでは、送信する必要があります。
conf->ヘッダなど>長さ:nginxのスクリプトを形成し、ヘッダ・フィールドの長さを算出します。
conf->ヘッダなど>値:nginxのスクリプト形式は、ヘッダフィールドの内容を計算します。
-
cmcf-> headers_in_hash
構造(構造が要求ヘッダーフィールドを定義し、これらのフィールドの代入値が定義されている)ngx_http_headers_inに従って、ハッシュテーブルが初期化されます。初期化ヘッダ解析ステージR-> headers_inメンバーを要求します。 -
解析(ngx_http_parse_header_line)
-
処理(ngx_http_process_request_headers)
R-> headers_in割り当てのため。見つけ出すために、R-> headers_in.headersに直接保存;。headers_in_hashはR-> headers_in.headersも>特定のフィールドをheaders_in R-保存する必要に格納見つけることができますについて invalid_headerために、例えば、「_」ヘッダフィールドは、英数字以外のヘッダフィールドを開始する構成(ignore_invalid_headers)選択を保存するかどうか、始めます。 -
发送(U-> create_request(ngx_http_proxy_create_request))
/*首先使用plcf->headers->values脚本,对nginx自定义字段进行发送*/ e.ip = headers->values->elts; e.pos = b->last; e.request = r; e.flushed = 1; le.ip = headers->lengths->elts; while (*(uintptr_t *) le.ip) { } /*根据pass_request_headers配置(默认使能),将r->headers_in.headers中保存的原始报文的头字段进行发送,在发送前,首先用变量名查询conf->headers->hash哈希表,如果原始字段和自定义字段冲突,已自定义字段为准*/ if (plcf->upstream.pass_request_headers) { }
第二に、応答ヘッダ
-
读取(ngx_http_proxy_process_header)
umcf->headers_in_hash哈希表:ngx_http_upstream_init_main_conf函数会根据ngx_http_upstream_headers_in结构体(该结构体定义一些响应头字段,并定义这些字段的赋值方法),对该哈希表进行初始化。当解析结束后,nginx使用解析到的头字段name查询上述哈希表,并通过相对应的handler方法,对r->upstream->headers_in.xxx赋值。hh = ngx_hash_find(&umcf->headers_in_hash, h->hash, h->lowcase_key, h->key.len); if (hh && hh->handler(r, h, hh->offset) != NGX_OK) { return NGX_ERROR; }
给r->upstream->headers_in.headers增加“server”和“date”字段。
-
解析(ngx_http_parse_header_line)
-
存储(r->upstream->headers_in.headers(ngx_http_upstream_headers_in_t))
-
処理(ngx_http_upstream_process_headers)
ヘッド構造ngx_http_request_tで解析リクエストheaders_outメンバーに提供されています。
U-> CONF - > hide_headers_hash:ヘッダフィールド命令セット、及びクライアントへの送信を禁止する応答してヘッダーフィールドを設定するために、ハッシュテーブルを形成するngx_http_proxy_hide_headers構造を指定するフィールドproxy_hide_header。しかしながらproxy_pass_header指定されたヘッダフィールドセットは例外として設定され、それが禁止から除外されます。
フィールドがumcf-> headers_in_hash、コールhh-> copy_handler方法に存在する場合、コンテンツはR-> headers_outにコピー。フィールドが存在しない場合や、そのコピーは直接> headers_out.headersをR-します。 -
送信(ngx_http_header_filter)