Discuz!大师网

搜索
查看: 1874|回复: 0

Discuz!论坛运营之使用CDN后无法获取真实IP的解决方法

[复制链接]
发表于 2017-4-16 22:29:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
现在很多的网站都是使用CDN加速,但是使用之后会造成无法获取访客真实IP,本文以阿里云CDN为例,介绍一下解决办法:
打开文件:\source\class\discuz\discuz_application.php
找到代码:
  1. private function _get_client_ip() {
  2.         $ip = $_SERVER['REMOTE_ADDR'];
  3.         if (isset($_SERVER['HTTP_CLIENT_IP']) && preg_match('/^([0-9]{1,3}\.){3}[0-9]{1,3}$/', $_SERVER['HTTP_CLIENT_IP'])) {
  4.                 $ip = $_SERVER['HTTP_CLIENT_IP'];
  5.         } elseif(isset($_SERVER['HTTP_X_FORWARDED_FOR']) AND preg_match_all('#\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}#s', $_SERVER['HTTP_X_FORWARDED_FOR'], $matches)) {
  6.                 foreach ($matches[0] AS $xip) {
  7.                         if (!preg_match('#^(10|172\.16|192\.168)\.#', $xip)) {
  8.                                 $ip = $xip;
  9.                                 break;
  10.                         }
  11.                 }
  12.         }
  13.         return $ip;
  14. }
复制代码

修改为:
  1. private function _get_client_ip() {
  2.         $ip = $_SERVER['REMOTE_ADDR'];
  3.         if (isset($_SERVER['X-Forwarded-For']) && preg_match('/^([0-9]{1,3}\.){3}[0-9]{1,3}$/', $_SERVER['X-Forwarded-For'])) {
  4.                 $ip = $_SERVER['X-Forwarded-For'];
  5.         }elseif (isset($_SERVER['HTTP_CLIENT_IP']) && preg_match('/^([0-9]{1,3}\.){3}[0-9]{1,3}$/', $_SERVER['HTTP_CLIENT_IP'])) {
  6.                 $ip = $_SERVER['HTTP_CLIENT_IP'];
  7.         } elseif(isset($_SERVER['HTTP_X_FORWARDED_FOR']) AND preg_match_all('#\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}#s', $_SERVER['HTTP_X_FORWARDED_FOR'], $matches)) {
  8.                 foreach ($matches[0] AS $xip) {
  9.                         if (!preg_match('#^(10|172\.16|192\.168)\.#', $xip)) {
  10.                                 $ip = $xip;
  11.                                 break;
  12.                         }
  13.                 }
  14.         }
  15.         return $ip;
  16. }
复制代码
这里的X-Forwarded-For就是阿里云CDN包含访客真实ip的头信息,如果使用的是其他家的CDN,查阅其帮助文件或咨询客服,将上面的X-Forwarded-For改成对应的就行了;

回复 马甲回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|网站地图|小黑屋|展会网|Discuz站长论坛 |天天打卡

GMT+8, 2024-5-6 05:20 , Processed in 0.031562 second(s), 15 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表