#教程# 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
点赞14 分享
评论 共2条
头像
务必使用真实的邮箱地址评论,虚假邮箱的评论将不通过审核及无回复。
提交
头像

昵称

取消
昵称表情代码图片
    • 头像Rhilip1