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