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|'<br />
'$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
blog: http://www.timoseven.com
twitter: http://twitter.com/zauc
Linux System Admin & MySQL DBA

关于 Timo
XNIX SA & MYSQL DBA

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s

%d 博主赞过: