nginx log format 中分别对应request中的那些变量. 200

 我来答
源源是我的哼BWa54
2017-08-07 · TA获得超过665个赞
知道小有建树答主
回答量:411
采纳率:66%
帮助的人:145万
展开全部

是这样子的,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来试试。

全部来自转载并非原创

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式