nginx日志定制
由于工作需要,需要用到nginx的很多特性,但是每个层次需要做不同的功能。虽然下面这个日志配置文件可以很好的运行。可我就跟郭欣在《构建高性能web站点》中说的,我还没弄清楚这些日志配置之后的原理。
测试环境
1. 10.1.41.81 client
2. 10.10.72.148 proxy
3. 10.10.72.219 cache
4. 10.10.72.221 real server
日志设置的需求
1. 日志设置的结果需要在所有节点上知道它的上一级IP和用户IP,这样可以方便查找问题 2. 日志设置的第二个目的是在proxy和cache都加了response time和request time 3. 在cache层的日志增加了cache的命中结果,有MISS,EXPIRED,HIT等5种不同状态 4. 在源站加入了gzip的压缩比
5. msec是表示用毫秒表示当前写入日志的时间
意外发现
1. 客户端连接nginx是Http1.1,而proxy连接后端却是http1.0,暂时nginx还不支持连接后端使用http1.1
nginx获取realip编译
必须加入这个模块
--with-http_realip_module
nginx前段proxy日志格式
全部通过|线进行分割,方便以后进行分割统计
log_format proxy '$remote_addr|$upstream_addr|$connection|$upstream_status|$time_local|$request|' '$status|$body_bytes_sent|$bytes_sent|$http_referer|' '$http_user_agent|$upstream_response_time|$msec|$request_time';
同时在server部分要这样进行设置
proxy_set_header real_ip_header X-Real-IP; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $http_host;
显示的结果如下:我们可以看到客户请求IP和后端被转发服务器的IP和端口
10.1.41.81|10.10.72.219:80|230|200|03/Sep/2010:17:33:03 +0800|GET /index.html HTTP/1.1|200|176|498|-|Mozilla/5.0 (X11; U; Linux x86_64; zh-CN; rv:1.9.2.8) Gecko/20100723 Ubuntu/10.04 (lucid) Firefox/3.6.8|0.000|1283506383.661|0.000
nginx cache的日志设置
也是通过竖线进行分割
log_format cache '$remote_addr|$http_x_forwarded_for|$upstream_addr|$connection|$upstream_status|$time_local|$request|$status|'
'$body_bytes_sent|$bytes_sent|$http_referer|' '$upstream_response_time|$msec|$request_time|$upstream_cache_status';
server部分需要进行如下设置
proxy_set_header real_ip_header X-Real-IP; proxy_set_header Host $http_host; proxy_set_header Forwarded-For $remote_addr;
日志显示的结果如下: 当cache要从后端取数据的时候我们可以看到上一级IP,用户IP,以及需要被转发的IP。而假如是直接HIT本地的话那就不会有被转发IP了。
10.10.72.148|10.1.41.81|10.10.72.221:80|1|200|03/Sep/2010:17:55:13 +0800|GET /index.html HTTP/1.0|200|165|454|-|0.003|1283507713.029|0.003|EXPIRED 10.10.72.148|10.1.41.81|-|3|-|03/Sep/2010:17:55:13 +0800|GET /index.html HTTP/1.0|200|165|454|-|-|1283507713.358|0.000|HIT
nginx real server日志设置
log_format real '$remote_addr|$http_x_forwarded_for|$time_local|$request|' '$status|$body_bytes_sent|$bytes_sent|$http_referer|' '$http_user_agent|$msec|$request_time|$gzip_ratio';
得到的结果如下:我们可以看到客户端IP,和上一级CACHE的IP
10.10.72.219|10.1.41.81|03/Sep/2010:17:50:23 +0800|GET /index.html HTTP/1.0|200|165|424|-|Mozilla/5.0 (X11; U; Linux x86_64; zh-CN; rv:1.9.2.8) Gecko/20100723 Ubuntu/10.04 (lucid) Firefox/3.6.8|1283507423.583|0.000|18.83
###########################################
Best regards
Timo Seven
()
Linux System Admin & MySQL DBA