使用CDN之后APACHE日志记录中IP地址不正确的解决方案_Linux

最近在搞APACHE日志分析,装好了awstats之后,这两天进行了观察,

报表日期 月 1 月 2010
首次参观日期 2010年01月12日 11:04
最近参观日期 2010年01月13日 23:59
    参观者 参观人次 网页数 文件数 字节
浏览器流量 * 77  226  (2.93 参观人次/参观者) 508979 (2252.11 网页数/参观) 509492 (2254.38 文件数/参观) 13.67 G字节 (63430.28 K字节/参观)
非浏览器流量 *  117312 122716 736.24 M字节

这边的结果很让人费解,通过google统计网站的独立IP访问量有2W做,这里显示的数字相差甚远。  后面的网页数和文件数又都与实际相吻合。  经过查找原因发现 apache日志里记录的IP地址不正确,大部分都是cdn的节点地址。 产生的原因很显然是因为CDN造成的,之前在网站后台程序里读取用户IP地址也出现了类似问题。 可以使用print_r($_SERVER)  (PHP语言),查找到真实的用户IP地址,本站为 $_SERVER[‘HTTP_CDN-SRC-IP'].  这个是CDN携带的真实的客户IP地址(这里不计较用户是否使用代理)。 但在APACHE的日志记录里如何使用这个值呢?  本人在GOOGLE和百度里查找了许久都没有找到相应的资料或者说解决方案,只好自己思考寻求了。
仔细看了下APACHE里日志记录的相关配置,针对LogFormat:
LogFormat "%h %l %u %t /"%r/" %>s %b /"%{Referer}i/" /"%{User-Agent}i/"" combined
我思索里面的%{Referer}和%{User-Agent} 是如何取得的, 这两个是在程序里也是经常会用到的东西,客户端发送请求的时候 这两个信息都是作为头详细发送到服务器的。后来查看了下访问时的所有头信息,如下:

复制代码 代码如下:

Array
(
    [Cdn-Src-Ip] => 222.44.46.58
    [Accept] => image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
    [Accept-Language] => zh-cn
    [User-Agent] => Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; CIBA; .NET CLR 2.0.50727)
    [Host] => www.875.cn
    [Cookie] => __utma=217127135.1188793388.1263188369.1263364666.1263368206.5; __utmz=217127135.1263368206.5.2.utmcsr=211.167.92.250|utmccn=(referral)|utmcmd=referral|utmcct=/cgi-bin/awstats/awstats.pl; viewedShopsID=621; viewedShopsPP=%u6B27%u5C1A%u574A
    [Accept-Encoding] => gzip
    [Via] => 1.1 hnay40:80 (Cdn Cache Server V2.0)
    [Connection] => keep-alive
)

当然rerfer的时候也会有rerfer信息出现在头部信息里,上面也有Cookie、Host、User-Agent等信息,这些信息都是可以在apache配置文件里可以使用的变量,当然这里Cdn-Src-Ip正是我想要的客户的真实IP地址。 于是推测${Cdn-Src-Ip}在日志记录格式里应该也是可以使用的。 后面的i应该是指忽略大小写的意思。于是得出一个解决方案:

添加一个新的logformat信息

复制代码 代码如下:

LogFormat "%{Cdn-Src-Ip}i %l %u %t /"%r/" %>s %b /"%{Referer}i/" /"%{User-Agent}i/"" combinedcdn

在需要记录的网站配置里增加:

复制代码 代码如下:

CustomLog "|/usr/local/sbin/cronolog /usr/local/apache/logs/www.875.cn-access_log.%Y%m%d" combinedcdn env=!IMAGES

重启apache服务,然后访问网站,查看日志记录发现现在可以正常记录客户IP地址了。

时间: 2024-10-27 02:18:31

使用CDN之后APACHE日志记录中IP地址不正确的解决方案_Linux的相关文章

LNAMP架构中后端Apache获取用户真实IP地址的2种方法_Linux

一.Nginx反向代理配置: 1.虚拟主机配置 复制代码 代码如下: location / {    try_files $uri @apache;} location @apache {internal;    proxy_pass http://127.0.0.1:8080;    include proxy.conf;} location ~ .*\.(php|php5)?$  {    proxy_pass http://127.0.0.1:8080;    include proxy.

无线网络中IP地址冲突故障的解决

在一些无线网络中,由于客户机数目较多,为方便对这些机器进行管理,很多管理员会使用无线路由器提供的DHCP服务,为客户机提供TCP/IP参数配置,如IP地址.网关地址和DNS服务器等.但如果你的无线网络中,有些电脑必须手工指定TCP/IP参数配置,这时DHCP服务器提供的动态IP地址和手工指定的静态IP地址共存,如果你没有合理配置无线路由器中DHCP服务器的参数,就会很容易造成IP地址冲突. 冲突如何产生? 如笔者管理的一个无线网络,有50台电脑,其中有5台电脑由于特殊需要,使用了手工设置静态IP

TP-LINK路由器防火墙如何设置中IP地址过滤

  TP-LINK路由器防火墙设置中IP地址过滤的方法 首先必须找到需要过滤哪些IP地址,我们通过下面的方法得到需要过滤的登陆服务器的IP地址. 小编就用QQ来举例吧.当QQ登陆成功后,进入QQ设置. 点击"网络连接",查看"登录服务器",这里显示的IP地址就是我们要过滤的IP地址. 然后我们就开始设置IP地址过滤. 注意这里选择的缺省过滤规则是.凡是不符合已设IP地址过滤规则的数据包,允许通过本路由器. 由于QQ登陆时可能会重定向IP地址,所以我们在找到一个登陆I

ping域名发现ip地址不正确,但网站可以访问

问题描述 ping域名发现ip地址不正确,但网站可以访问 ping域名发现ip地址不正确,不是我们服务器的地址 但网站却可以访问,以前从没遇到过这个现象 我们也没有使用过什么加速.缓存什么的 解决方案 ping 是走的icmp协议. 解决方案二: 自己去域名管理后台看下做了cname记录没有..不是你说没有就没有,也可能是dns临时服务器出问题了什么的 解决方案三: 不可能!既然能ping到这个IP,那么说明你们服务器上一定有!要么是双网卡(另一个网卡IP你不知道,这个可能性小),要么就是域名不

Java日志记录中很常见的五条规则

日志记录是在软件开发过程中常常需要考虑的关键因素.当产品运行出错时,日志文件通常是我们进行错误分析的首要选择.而且,在很多情况下,它们是我们手上唯一可以用来查明发生状况和问题根本原因的信息.可见,正确记录需要的信息是极其重要的. 以下5条日志规则,让我们可以检查和改进在代码中操作日志记录的方式. 同时也请注意,我们既不会讨论怎么配置一个日志引擎,也不会相互比较. 规则1.日志是面向读者的 日志消息不仅要对书写(日志)代码的人有意义,也应该对日志文件的读者有意义. 这似乎是一条很明显但却经常违背的

Apache日志记录组件Log4j出现反序列化漏洞 黑客可以执行任意代码 所有2.x版本均受影响

开源的东西用的人多了,自然漏洞就多.Apache用于日志记录的组件Log4j使用非常灵活,在相当多的开源项目中都有使用,此次漏洞影响所有Apache Log4j 2.*系列版本: Apache Log4j 2.0-alpha1 – Apache Log4j 2.8.1,使用Java 7+的用户应立即升级至2.8.2版本.绿盟科技发布安全威胁通告,通告全文如下: Apache Log4j是什么 Log4j是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台.文

如何记录访问者IP地址

ip地址|访问|ip地址 对于一个网站的管理员来说,对访客进行IP记录是必要的.通过进行记录访客的IP,对网站的访问量统计.访客来源地区的分布.对不法访客进行追查等提供了重要的信息. 在编制程序之前,我们首先要掌握几个要点. 1.获取客户端IP地址语句:Request.ServerVariables("remote_addr"): 2.ASP语句写入Cookies:Response.Cookies("cookiesName"):读出cookies:Request.C

发现Linux中IP地址冲突的方法

  你们都知道什么是IP地址,是吧?它们被分配给网络上的设备来代表它们.它们通过DHCP服务器分配并且会经常改变.现在有两种IP地址.动态的一种会经常改变(几天一次),而静态的就如它的名字那样是静态的,意味着它们不会改变. 有时这会引发一些冲突.当一个动态IP被分配了并且有另外一台网络设备已经拥有了相同的IP.或者在相同网络子网上有多台分配IP的DHCP服务器.如果你有连通问题并且假设它是由于IP冲突造成的,那么你可以使用一个工具称作arp-scan来扫描它们. 这个工具会在本地网络发送ARP(

如何解决windows7中IP地址冲突故障

  故障图: 1.首先在点击任务栏有小脚的网络连接图标,在弹出对话框中选择"打开网络和共享中心"; 2.然后打开窗口左侧的"更改适配器设置"项; 3.接着在弹出来的网络连接界面中找到本地连接图标并右击选择"属性"选项; 4.在本地连接状态窗口中,点击"属性"按钮; 5.然后在本地连接属性面板中下来选择"Internet协议版本4(TCP/IPv4)",点击下面的"属性"按钮; 6.然后在