現象:
1.DZ 論壇可能無法獲得使用者的真實 IP
2. 論壇訪問量過大的話,可能會導致使用者訪問時提示 「抱歉,您的 IP 地址不在被允許,或您的賬號被停用,無法訪問本站點」

原因:
使用 CDN,對於網站訪客來說,相當於使用了代理訪問,而 DZ 在設計上,是優先獲取代理 IP,其它才會檢測代理伺服器是否將使用者真實 IP 傳輸過來,也就是說獲取代理 IP 優先於使用者真實 IP 。如果您的網站不需要對使用者訪問做過多的限制,強烈建議按照以下方法進行:

解決方法 (DZ X2 為例):
開啟 DZ    /source/class/class_core.php 檔案
找到第 341 行,或者搜尋 「HTTP_CLIENT_IP」,找到如下程式碼:

  1. if (isset($_SERVER['HTTP_CLIENT_IP']) && preg_match(『/^([0-9]{1,3}.){3}[0-9]{1,3}$/』, $_SERVER['HTTP_CLIENT_IP'])) {
  2. $ip = $_SERVER['HTTP_CLIENT_IP'];
  3. } 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'],
  4. if (isset($_SERVER['HTTP_CLIENT_IP']) &&
    preg_match(『/^([0-9]{1,3}.){3}[0-9]{1,3}$/』,
    $_SERVER['HTTP_CLIENT_IP'])) {         $ip =
    $_SERVER['HTTP_CLIENT_IP'];         }
    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'],

方法 1:
將以上程式碼修改為:

  1. if(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'],
  2. if(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'],

方法 2:
臨時註釋部分程式碼,也就是比原來的程式碼多了二對註釋符 (/*和*/) 即將上面的程式碼修改成:

  1. /*
  2. if (isset($_SERVER['HTTP_CLIENT_IP']) && preg_match(『/^([0-9]{1,3}.){3}[0-9]{1,3}$/』, $_SERVER['HTTP_CLIENT_IP'])) {
  3. $ip = $_SERVER['HTTP_CLIENT_IP'];
  4. } else
  5. */
  6. if(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'],
  7. /*
  8. if (isset($_SERVER['HTTP_CLIENT_IP']) &&
    preg_match(『/^([0-9]{1,3}.){3}[0-9]{1,3}$/』,
    $_SERVER['HTTP_CLIENT_IP'])) {         $ip =
    $_SERVER['HTTP_CLIENT_IP'];         }else
  9. */
  10. if(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'],

以上操作後,登陸 CDN 和你的 Discuz! 論壇後臺分別清除快取即可。
備註:部分版本的 Discuz! 該檔案中可能有區別,