Nginx使用CDN(CloudFlare)获取网站日志真实IP地址

前言

前几天购买了法国 KS1 来安装图床,并且套上了 cloudflare,安装完后发现 Nginx 日志记录的 IP 全部都是 CDN(cloudflare)节点的 IP,而不是用户真实的用户 IP 记录。如果我们需要进行日志分析时候就比较困难,我比较常用的就是 Nginx 环境,怎么针对 Nginx 环境进行设置,在既想用 CDN 加速的同时,网站的日志也可以看到是真实 IP 地址。

图片[1] - #教程# Nginx使用CDN(CloudFlare)获取网站日志真实IP地址 - 云线路

 

解决方案

这里我安装的是军哥的 LNMP,网上找了一些教程都比较复杂,这里有 2 个最简单的方法:

方法一

修改 Nginx 配置文件 /usr/local/nginx/conf/nginx.conf 文件,添加在 http 字段中:

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

然后再修改当前站点/usr/local/nginx/conf/vhost/img.7198.net.conf  日志记录后加上 access

access_log /www/wwwlogs/img.7198.net.log access;

重启 Nginx,OK

service nginx reload

这个方法兼容性不好,下面的方法二可以兼容套 CDN 和没套 CDN 一起使用。

方法二

修改 Nginx 配置文件 /usr/local/nginx/conf/nginx.conf  文件,添加在 http 字段中:

map $HTTP_CF_CONNECTING_IP $clientRealIp 
{
    "" $remote_addr;
    ~^(?P[a-z0-9.:]+),?.*$ $firstAddr;
}
log_format access '$clientRealIp [$time_local] "$request" '
                  '$status $body_bytes_sent "$http_referer" '
                  '$http_user_agent $remote_addr $request_time';

然后再修改当前站点/usr/local/nginx/conf/vhost/img.7198.net.conf  日志记录后加上 access

access_log /www/wwwlogs/img.7198.net.log access;

重启 Nginx,OK

service nginx reload

方法二主要是为了通用性,如果关闭了 CDN,可以不需要修改获取 IP 的方式;

这里我们很多朋友可能不会用同样的 Nginx 环境,但是大概意思都差不多。

 

结语

这里我只测试了 cloudflare 的 CDN 没有问题,已经在日志里获取到真实 IP 了,其他的 CDN 大家去自行测试,有问题可以在下方留言!

本站文章资源均来源自网络,除非特别声明,否则均不代表站方观点,并仅供查阅,不作为任何参考依据!
如有侵权请及时跟我们联系,本站将及时删除!
如遇版权问题,请查看 本站版权声明
THE END
分享
二维码
海报
Nginx使用CDN(CloudFlare)获取网站日志真实IP地址
前言 前几天购买了法国 KS1 来安装图床,并且套上了 cloudflare,安装完后发现 Nginx 日志记录的 IP 全部都是 CDN(cloudflare)节点的 IP,而不是用户真实的……
<<上一篇
下一篇>>