違法網站請勿向我司工作人員發起任何形式的人工服務請求,嚴禁利用鴻茂傳媒技術支持服務與產品從事任何非法活動,如有發現不再提供任何技術支持。×

discuz! x3.5使用cdn後論壇如何獲取真實ip

觀前提示:修改discuz不是獲取真實ip的最佳方法

如果您有能力,建議了解apache mod_remoteip、nginx ngx_http_realip_module 或其他同類功能

在伺服器端配置可以讓你的伺服器訪問日誌也能收集到正確的ip

參照此教程修改之前,請務必確認x3.5當前是否能夠獲取到真實的ip地址

如果已經能獲取到真實ip地址的情況下,切勿參照此教程修改!

首先打開 config/config_global.php 這個文件,找到這樣一行:

$_config['security']['onlyremoteaddr'] = 1;

將1改成0

然後到大約最下面的位置,找到這樣一段:

//------------------------- config ipgetter --------------------------//

$_config['ipgetter']['setting'] ='';

$_config['ipgetter']['header']['header'] =' http_x_forwarded_for'

將其中的

$_config['ipgetter']['setting'] ='';

改成

$_config['ipgetter']['setting'] =' header';

(如果已經是header了就不用改了)

對於許多cdn來說,做到這一步就已經能獲取到真實ip了,可以試一下。

在做完上一步的前提之下,如果你的cdn屬於以下範圍,可以進一步參考以下內容嘗試進行修改,並觀察獲取到的ip

按下述方法進一步修改後往往能得到正確或者更準確的結果

(以下信息均來自於各大廠商官方文檔,是否可用需要看廠商文檔的準確程度,建議修改後自行測試)

需要修改的是這一行:

$_config['ipgetter']['header']['header'] =' http_x_forwarded_for';

cloudflare:

改成

$_config['ipgetter']['header']['header'] =' http_cf_connecting_ip';

阿里雲:

方案1:改成

$_config['ipgetter']['header']['header'] =' http_ali_cdn_real_ip';

方案2:

(這個視情況修改,不一定可用)

https://help.aliyun.com/document_detail/155768.html

參考此文章最下面的配置示例二

配置場景:在回源頭裡面添加客戶端真實ip信息,給源站傳遞客戶端ip地址信息。

配置方法:

自定義請求頭名稱:x-real-ip。

請求頭參數:$remote_addr。

配置後,將上述行改成

$_config['ipgetter']['header']['header'] =' http_x_real_ip';

騰訊云:

https://cloud.tencent.com/document/product/228/45078

參考此文章進行修改騰訊雲的配置

頭部參數設置為:x-client-ip

頭部取值設置為:$client_ip

配置後,將上述行改成

$_config['ipgetter']['header']['header'] =' http_x_client_ip';

又拍雲:

改成

$_config['ipgetter']['header']['header'] =' http_x_real_ip';

fastly:

改成

$_config['ipgetter']['header']['header'] =' http_fastly_client_ip';

azure:

改成

$_config['ipgetter']['header']['header'] =' http_x_azure_clientip';

由於cdn廠商眾多,無法一一列出,且這部分功能還需要進一步的完善

配置好discuz部分並可以順利正常使用以後,如果您的站點沒有使用獨立模式的話,還需要對ucenter server也進行相應的配置。

到 uc_server/data/config.inc.php 文件當中找到如下一段:(使用自定義路徑uc的需要將uc_server換成自己真正的uc位置)

(早期x3.5版本可能沒有,沒有可以在文件結尾自行加上)

define('uc_onlyremoteaddr', 1);

define('uc_ipgetter',' header');

define('uc_ipgetter_header', serialize(array('header' =>'http_x_forwarded_for')));

將uc_onlyremoteaddr那行的1改成0即可。

uc_ipgetter_header那行的http_x_forwarded_for,也可以按照上面修改discuz的方式修改成自己需要的值(上面沒改過的則不用管)

特別安全提示:

$_config['security']['onlyremoteaddr'] = 1;

配置文件中的這一行,改成0以後絕對要仔細檢查ipgetter是否正確填寫

如果忘了寫雖然也可以讓你獲取到用戶ip,但會導致網站無條件信任用戶端傳來的ip信息

黑客可以藉機將自己的ip偽造成任意值,對你的站點安全會造成很大的影響!

這一點務必注意!

------------------------

經過鴻茂傳媒測試:部分用戶修改上面代碼後,測試註冊論壇帳號後發現,依然用戶註冊的ip還是cdn的ip顯示。

打開網站目錄:/source/class/discuz/discuz_application.php 文件,找到return $ip;方法,如下:

20240527161110

替換以下代碼

if (isset($_server['http_x_real_ip'])){

$ip = $_server['http_x_real_ip'];

}

return $ip;

20240527161302

修改以上代碼後,去後台更新緩存,並重新在測試註冊帳號是否是本地ip了。

© 網站版權與免責聲明

1、【鴻茂傳媒】獨立擁有本網站相關網頁內所有資料的版權;

2、未經【鴻茂傳媒】的明確書面許可,任何人不得對其進行複製;

3、本網站未註明【鴻茂傳媒】的文章,均來源於網絡,僅供大家學習與參考;

4、如有侵權/違規/不妥請聯繫客服qq或郵箱刪除,敬請諒解;

5、【鴻茂傳媒】保留隨時更正、修改、更新本聲明的權利。法律申明

服務需求留言板
*緊急問題聯繫客服
提交
提交需求
工作日: 8:30 - 22:00 在線qq客服

掃碼諮詢微信客服

鴻茂傳媒企業居間
頂部