文章内容

2019/12/19 17:30:38,作 者: 黄兵

Nginx使用CDN后日志如何记录真实用户IP

最近在使用cdn的时候,日志记录的全部是cdn ip,给分析access.log带来了很多麻烦,于是参考这篇文章:Nginx环境使用CDN加速后网站日志获取真实用户IP地址方法

自己配置了一下日志记录,如下:

http {
	log_format main '$http_x_forwarded_for - $remote_user [$time_local] '
                    '"$request" $status $body_bytes_sent '
                    '"$http_referer" "$http_user_agent"';

	access_log /var/log/nginx/access.log main;
	error_log /var/log/nginx/error.log;

其中:$http_x_forwarded_for这个变量的意思,其实就像是链路反追踪,从客户的真实ip为起点,穿过多层级的proxy ,最终到达web 服务器,都会记录下来,所以在获取用户真实ip的时候,一般就可以设置成,proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for; 这样就能获取所有的代理ip和客户ip了。

这里有一个从nginx日志中截取的一个片段,如下:


可以看到红框内,有两个ip,117.69.128.245应该是上游的代理IP,而222.124.204.83则是客户IP(其实也是一个代理IP,使用了nginx作为反代)。


参考资料:

1、关于nginx获取真实ip,proxy_set_head设置头部信息的理解

2、Nginx环境使用CDN加速后网站日志获取真实用户IP地址方法

分享到:

发表评论

评论列表