使用CDN后Nginx源站如何获取用户真实IP

Linux
使用CDN后Nginx源站如何获取用户真实IP-下一朵云

Nginx默认日志格式中 $remote_addr 打印出来的就是用户的IP地址,但在使用CDN后,打印出来的IP地址就变成了CDN回源节点的IP地址,因为 remote_addr 只能获取最近一跳的IP地址。

解决办法:

编辑nginx.conf文件,确认一下配置:

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

这样 $http_x_forwarded_for 就可以获取到用户的真实IP,如上配置,这样用户的真实IP会显示在一条日志的最后边,审计起来不是很方便,可以稍作修改,把真实IP显示在每条日志的最前边,修改如下:

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

在vhost配置文件中,添加以下内容,让日志记录是调用格式main

 access_log  /var/log/nginx/test.log  main

配置好以上内容后,每条日志 -* 前边就会显示用户的真实IP,如下图1

使用CDN后Nginx源站如何获取用户真实IP-下一朵云
图1 日志显示真实IP