今天想看看哪些地区的人访问过我的网站,于是打开Apache网站响应日志,把访客IP复制到百度,发现搜到的全部都是我是用的CDN的节点IP,真实的访客IP并没有被记录。

如图所示,上面的103.45.78.85还有58、122段全部都是CDN节点的IP,真实访问者的IP一个都没有记录下来。

一、调试

于是获取了一下服务器接收到的请求头,新建一个request.php文件放到网站根目录,内容如下:

<?php
$headers = apache_request_headers();
 
foreach ($headers as $header => $value) {
echo "$header: $value <br />\n";
}
?>

然后访问https://wuter.cn/request.php,出现了下面这个错误。

根据内容大概能判断是因为apache_request_headers()这个函数没有被定义,但是php手册说是支持这个函数的。

没办法,既然没定义那就在调用之前定义一下,已经php是世界上最好的编程语言(梗)。

定义如下:

<?php
if (!function_exists('apache_request_headers')) {
eval('
function apache_request_headers() {
foreach($_SERVER as $key=>$value) {
if (substr($key,0,5)=="HTTP_") {
$key=str_replace(" ","-",ucwords(strtolower(str_replace("_"," ",substr($key,5)))));
$out[$key]=$value;
}
}
return $out;
}
');
}
?>

二、解决方法

这时访问https://wuter.cn/request.php已经能够成功显示请求头了,复制如下:

Accept-Language: zh-CN,zh;q=0.9
X-Forwarded-For: 171.43.251.197
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36
X-Edge-Retry-Times: -
Cookie: __cfduid=d31ec109277e7f67c282c6336c8a83a3b1597994775; mp_a36067b00a263cce0299cfd960e26ecf_mixpanel=%7B%22distinct_id%22%3A%20%221743aa1b561296-022e8eee62b6b5-376b4502-1fa400-1743aa1b5628a0%22%2C%22%24device_id%22%3A%20%221743aa1b561296-022e8eee62b6b5-376b4502-1fa400-1743aa1b5628a0%22%2C%22%24initial_referrer%22%3A%20%22https%3A%2F%2Fwuter.cn%2Fwp-admin%2Fedit.php%22%2C%22%24initial_referring_domain%22%3A%20%22wuter.cn%22%7D; wordpress_test_cookie=WP+Cookie+check; wordpress_logged_in_4b895119d7c61df7bd4d354ad8fcdfdc=admin%7C1599035914%7CTnFr34eVmo45MRlZ9QD8IpGwOF9yaQBTvNWFxXvsm36%7Cf0b77a434e8a2fc726a517dff72e27ea96bb2a591c1466be5e50a79bfd1b72e7; wp-settings-1=libraryContent%3Dbrowse%26mfold%3Do%26cats%3Dpop; wp-settings-time-1=1598863115
Sec-Fetch-Mode: navigate
Client-Ip: 171.43.251.197
X-Via: shanks/0.10.18
Sec-Fetch-Site: same-origin
If-None-Match:
X-Request-Id: e7414229e9435c528a4ec3a8df091b1f
Upgrade-Insecure-Requests: 1
X-Real-Ip: 171.43.251.197
Sec-Fetch-User: ?1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
X-Route-Via: V.mix-js-czx2-048, S.mix-js-czx2-046
Host: wuter.cn

发现其中 X-Forwarded-For: 171.43.251.197 记录的就是我的真实IP,所以把这个添加到 Apache的配置文件http.conf 。搜索logformat找到下面这行.

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

将其改为:

LogFormat "real-ip:%{X-Forwarded-For}i cdn-ip:%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

三、测试

现在访问日志已经可以同时记载访客真实IP和给访客提供服务的CDN节点IP。

备注:如果访客使用代理访问,可能无法获取真实地址。

使用CDN后如何配置Apache使其记录访客真实IP的更多相关文章

  1. NGINX配置获取CloudFlare 下的访客真实IP并记录到日志

    我用的是lnmp.org的环境 /usr/local/nginx/conf/nginx.conf 在 http { } 部分增加 map $HTTP_CF_CONNECTING_IP $clientR ...

  2. 安装mod_rpaf让apache获取访客真实IP

    安装mod_rpaf让apache获取访客真实IP 安装mod_rpaf让apache获取访客真实IP 作者:朱 茂海 /分类:Apache  字号:L M S     mod_rpaf是apache ...

  3. CDN或负载均衡或WAF,后端服务器获取真实IP

    问题起因: 1. 后端PHP的$_SERVER["REMOTE_ADDR"]个别服务器获取不到真实IP 2. iptables 和 悬镜 等工具,设置IP黑名单不起作用 简单点说, ...

  4. 查找“CDN、负载均衡、反向代理”等大型网络真实IP地址的方法

    首先,CDN.负载均衡.反向代理还分为很多层,有时查出来的是最外层的 CDN 服务器群,真实的机器是不对外开放的,类似这样的: 用户 → CDN 网络 → 一台或多台真实机器 ↗ CDN Server ...

  5. 配置apache使之支持浏览器端的缓存

    当直接在浏览器中输入一个URL,或者点击一个链接的时候,那么浏览器缓存就会起作用,如果缓存没有过期,那么浏览器会从本地读取资源,不会发起HTTP请求,如果缓存过期,那么浏览器会发起新的浏览器请求. 一 ...

  6. 全部用startssl生成的证书,配置Apache使其支持SSL

    Apache的编译安装见这篇: http://www.cnblogs.com/yjken/p/3921840.html 网上查阅了一大批资料,得知自己生成的证书是会被浏览器提示“证书不安全”的,我也就 ...

  7. zend studio 配置 apache服务器事宜

    安装好 zend studio后,配置 apache服务器时,设置 configuration directory时,需选中 xampp\apache里面的 conf 文件夹,即完整的路径为: *\x ...

  8. Mac OS X 10.10 Yosemite下配置 apache+php

    自从系统从OS X Mavericks 10.9升级到OS X Yosemite 10.10 后之前配置apache和php均不能正常使用了, 重新设置配置如下: 首先,查看当前系统的apache版本 ...

  9. Mac 10.10 配置apache

    配置php 命令行工具:http://blog.csdn.net/evane1890/article/details/38759073 自从系统从OS X Mavericks 10.9升级到OS X  ...

随机推荐

  1. Leetcode 周赛#201 题解

    1545 找出第N个二进制字符串的第K位 #分治 题目链接 题意 给定正整数\(n(\leq 20)\)与\(k\),二进制串\(S_n\)形成规则有: \(S_1 = "0"\) ...

  2. 1.Cobaltstrike 安装与简介

    1.Cobaltstrike 安装与简介 一.简介 Cobalt Strike是一款美国Red Team开发的渗透测试神器,常被业界人内称为CS.自去年起, Cobaltstrike升级到3.0版本, ...

  3. Docker容器版Jumpserver堡垒机搭建部署方法附Redis

    1.简介 Jumpserver是全球首款完全开源的堡垒机,多云环境下更好用的堡垒机,使用GNU GPL v2.0开源协议,是符合 4A 的专业运维安全审计系统,使用Python / Django 进行 ...

  4. GoLang 自学系列(二)—— defer

    defer 关键字 首先来看官网的定义: A "defer" statement invokes a function whose execution is deferred to ...

  5. 第3.2节 Python列表简介

    鉴于Python中列表(list)的强大功能,本节及后面至少有一节都是介绍列表相关的知识,本节先介绍基本的列表知识. 一. 列表的定义 列表是一种可以修改的序列,它有点类似于c语言中的数组,在Pyth ...

  6. PyQt(Python+Qt)学习随笔:Action功能详解及Designer中的操作方法

    老猿Python博文目录 老猿Python博客地址 一.引言 Qt Designer中的部件栏并没Action相关的部件,Action可以在右侧的Action Editor中编辑,如图: 如果没有出现 ...

  7. js- 对象的连续调用

    var jack = { somke : function (){ console.log('I was in the somkeing...cool..'); return this; }, dri ...

  8. PR全套插件一键安装

    PR全套插件一键安装,无需注册码软件也是我在别的地方搬来的,自己用着很好,决定分享出来! 我的PR版本是2019,用着没有任何问题.我没有安装其他版本PR,所以无法测试,不过应该是可以用的. 使用截图 ...

  9. 返回sourceString 中出现的第一个 searchString 的索引

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. Python术语对照表

    >>> 交互式终端中默认的 Python 提示符.往往会显示于能以交互方式在解释器里执行的样例代码之前. ... 可以是指:交互式终端中输入特殊代码行时默认的 Python 提示符, ...