Jacky's Blog Jacky's Blog
  • 首页
  • 关于
  • 项目
  • 大事记
  • 留言板
  • 友情链接
  • 分类
    • 干货
    • 随笔
    • 项目
    • 公告
    • 影视
    • 尝鲜
    • 算法
    • 深度学习
首页 › 干货 › 部署 CDN 后获取客户端真实 IP

部署 CDN 后获取客户端真实 IP

Jacky
4月 12, 2020干货
1,916 0 0

因为各种原因已经使用 CDN 很多年了,一直有一个问题困扰着我,那就是上了CDN 的项目在后端获取到的客户端 IP 并不是客户的真实 IP,换句话说那是 CDN 回源节点的 IP。

这个问题其实早就在 WordPress 里发现了,以前一直没空研究,近期因为有自己写的项目涉及到这块了,就想着解决一下这个问题。

研究过程

看了一下阿里云的文档,大概知道回源的时候的请求会带上一个 Header,于是为了得到这个 Header 我在挂了 CDN 的网站下建立一个 php 文件用于测试。

<?php
print_r($_SERVER);

通过这个文件我们就能拿到所有的 Headers

Array
(
    ...
    [HTTP_ALI_CDN_REAL_IP] => 183.14.*.*
    [HTTP_X_FORWARDED_FOR] => 183.14.*.*
    [REMOTE_ADDR] => 112.49.*.*
    ...
)

重点需要关注这三个 Headers,HTTP_ALI_CDN_REAL_IP, HTTP_X_FORWARDED_FOR 是回源节点发送的自定义 Headers 即客户端的真实 IP,REMOTE_ADDR 是 Nginx 拿到的 “客户端” 的 IP。

而这个 REMOTE_ADDR 是 WordPress, Symfony(Laravel) 等项目获取客户端 IP 的函数所需要的。

后面又了解到了绝大多数 CDN 的厂商都会在回源的时候带上这个 HTTP_X_FORWARDED_FOR 这个 Header。

解决

那这就很简单了,为了尽可能减少对项目的改动,以及让线上的项目都能立刻获取到客户端的真实 IP,我就直接对 Nginx 的配置文件进行修改。

以 Nginx + PHP(fastcgi) 为例,这个代码添加在了 location 的块下。

set $real_ip $remote_addr;
if ($HTTP_X_FORWARDED_FOR != "") {
  set $real_ip $HTTP_X_FORWARDED_FOR;
}
if ($HTTP_ALI_CDN_REAL_IP != "") {
  set $real_ip $HTTP_ALI_CDN_REAL_IP;
}
fastcgi_param  REMOTE_ADDR $real_ip;

验证

在 WordPress 发一个评论

部署 CDN 后获取客户端真实 IP-Jacky's Blog
测试评论结果

那么这次获取到的 IP 即为真实地址。

文章最后修订于 2020年4月18日

CDN Nginx PHP
0
本文系作者 @Jacky 原创发布在 Jacky's Blog。未经许可,禁止转载。
WordPress OPcache Hook
上一篇
反转 Windows 鼠标滚轮方向
下一篇
评论 (0)
再想想
近期评论
  • Jacky发表在《iOS 固件下载中心》
  • Uni9k发表在《iOS 固件下载中心》
  • Jacky发表在《关于》
  • luyouqihome发表在《关于》
  • Jacky发表在《留言板》
二实起床铃
https://dl.jackyu.cn/blog/2016/10/2016100123314335.mp3
Copyright © 2016-2021 Jacky's Blog. Designed by nicetheme.
粤ICP备16016168号-1
  • 首页
  • 关于
  • 项目
  • 大事记
  • 留言板
  • 友情链接
  • 分类
    • 干货
    • 随笔
    • 项目
    • 公告
    • 影视
    • 尝鲜
    • 算法
    • 深度学习
热门搜索
  • Mac
  • Apple
  • OS X
  • iOS
  • macOS
  • Linux
  • WordPress
  • 阿里云
  • Windows
  • macOS Sierra
  • 运维
  • BootCamp
  • 维修
  • Cydia
  • Tweak
  • DEB
  • CDN
  • 加速网站
Jacky
PHP C C++ Python | 舞象之年 | 物联网工程
146 文章
114 评论
205 喜欢
  • 0
  • 0
  • Top