Cloudflare 获取客户端 IP 的正确姿势是什么

2023-03-05 16:08:12 +08:00
 tmkook
CF 设置:
安全等级 低
DDOS 设置 阻止 中
WAF 威胁分数小于 1 and 验证客户端证书 允许
速率限制 / 阻止 10 秒钟 100 次请求
网络 Pseudo IPv4 覆盖

Nginx 设置:
set_real_ip_from 0.0.0.0/0;
proxy_set_header Host $host;
real_ip_header CF-Connecting-IP;


在客户端引用了个外部获取 IP 的链接和服务器获取的 IP 记录日志做对比,
好多 IP 都不一致。去查 IP 所在地显示的是保留地址。

例如:

```
183.***.78.238 183.***.78.238 正确
39.***.59.121 245.***.112.100 不正确
14.***.210.68 243.120.78.159 不正确
```
1621 次点击
所在节点    Cloudflare
4 条回复
lslqtz
2023-03-05 16:30:20 +08:00
```
if (!empty($_SERVER['HTTP_CF_CONNECTING_IP'])) {
$clientIP = $_SERVER['HTTP_CF_CONNECTING_IP'];
} else if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
// Amazon CloudFront
#$clientIP = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR'])[0];
// Cloudflare
/*
$clientIPList = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']); // 临时使用, 其它代理 IP 不应纳入列表.
$clientIP = $clientIPList[((count($clientIPList) > 1) ? 1 : 0)];
*/
$clientIP = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR'])[0];
} else if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
$clientIP = explode(',', $_SERVER['HTTP_CLIENT_IP'])[0];
} else {
$clientIP = $_SERVER['REMOTE_ADDR'];
}
```
这边自己在程序里直接用的...
lslqtz
2023-03-05 16:33:51 +08:00
tmkook
2023-03-05 18:21:52 +08:00
@lslqtz 谢谢,取消 pseudo 然后关闭 ipv6 是吗?我试试
yumusb
2023-03-05 19:30:09 +08:00
不要设置 0.0.0.0/0

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/921303

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX