nginx log format 中分别对应request中的那些变量. 200
是这样子的,nginx的ngx_http_variables.c文件中对于nginx内置的http变量进行了定义。
从nginx的源码来分析,修改headers_in中的host成员是不会修改$host变量的值的。
如下是nginx的代码:
{ ngx_string("http_host"), NULL, ngx_http_variable_header,
offsetof(ngx_http_request_t, headers_in.host), 0, 0 },
{ ngx_string("host"), NULL, ngx_http_variable_host, 0, 0, 0 },
/**
*从如上的nginx变量的定义可知,对于$http_host变量,对应的才是headers_in结构体的host*成员。
*$host变量是通过ngx_http_variable_host函数去获取的。
*接下来,我们看ngx_http_variable_host的函数定义。
*/
static ngx_int_t
ngx_http_variable_host(ngx_http_request_t *r, ngx_http_variable_value_t *v,
uintptr_t data)
{
ngx_http_core_srv_conf_t *cscf;
if (r->headers_in.server.len) {
v->len = r->headers_in.server.len;
v->data = r->headers_in.server.data;
} else {
cscf = ngx_http_get_module_srv_conf(r, ngx_http_core_module);
v->len = cscf->server_name.len;
v->data = cscf->server_name.data;
}
v->valid = 1;
v->no_cacheable = 0;
v->not_found = 0;
return NGX_OK;
}
/**
*从函数定义可知,$host变量的值实际上是取得header_in结构中的server成员。如果该成员 *为空,取得的是配置文件中的server_name指令的值。
*/
因此,通过上述的分析,你修改了header_in的host成员,$host变量不变是正常的。可以用$http_host来代替$host来试试。
全部来自转载并非原创