- 问题:
[root@3WR ~]# curl -svo /dev/null test/ -x 127.0.0.1:9711
日志打印结果中http_user_agent不一致
1.控制台输出结果中打印0.9.
User-Agent: curl/7.15.5 (x86_64-redhat-linux-gnu) libcurl/7.15.5 OpenSSL/0.9. zlib/1.2.3 libidn/0.6.5
2.access.log中输出结果中打印0.9.8\x7F:
127.0.0.1- - [01/Jul/2015:13:01:14 +0800] “GET http://localhost/HTTP/1.1” 200 30 “-” “curl/7.15.5(x86_64-redhat-li nux-gnu) libcurl/7.15.5 OpenSSL/0.9.8\x7F zlib/1.2.3 libidn/0.6.5”
- 原因:
先看下ASCII码表
八进制 | 十六进制 | 十进制 | 字符 |
---|---|---|---|
177 | 7F | 127 | del |
原因是\x7F字符被解释成【删除】 操作, 于是, 本来应该记录的 0.9.8, 删除一个字符后变成了0.9.
跟踪看下为什么access.log打印出了\x7F
Breakpoint 6, ngx_http_log_variable (r=0x7587e0,
buf=0x7436b8 "curl/7.15.5 (x86_64-redhat-linux-gnu) libcurl/7.15.5 OpenSSL/0.9.8\\x7F zlib/1.2.3 libidn/0.6.5\"\n07t",
op=0x740410) at src/http/modules/ngx_http_log_module.c:893
893 value = ngx_http_get_indexed_variable(r, op->data);
(gdb) p *value
/* escape = 1,内容是"0.9.8\177",\177和\x7F是一个东西
都是符号del */
$16 = {len = 91, valid = 1, no_cacheable = 0, not_found = 0, escape = 1,
data = 0x76c13c "curl/7.15.5 (x86_64-redhat-linux-gnu) libcurl/7.15.5 OpenSSL/0.9.8\177 zlib/1.2.3 libidn/0.6.5"}
(gdb) bt
#0 ngx_http_log_variable (r=Unhandled dwarf expression opcode 0xf3
) at src/http/modules/ngx_http_log_module.c: