您在這裡

MediaWiki網站接入CDN

James Qi 在 2021年5月30日 - 23:26 發表

前面寫了幾篇與CDN相關的博客:CloudFlare百度雲加速Drupal,還有我們的MediaWiki網站也嘗試接入了CDN,所以也來記錄一下。

首頁,MediaWiki官方網站上這篇說明:Manual:CloudFlare是必須看的,全面介紹了MediaWiki接入CloudFlare需要注意的事項,包括優點和限制、安裝和配置、匿名用戶真實IP、緩存清理、參考資料鍊接等。

我們發現的一些問題和處理辦法:

1、LocalSettings.php中的修改:

MediaWiki 1.2 至 1.34之前的版本:

$wgUseSquid = true;
$wgSquidMaxage = 86400;
$wgSquidServers = array(//百度雲加速部分IP段
  '59.51.81.128-191',
  '61.182.137.0/25',
  '42.236.93.0/24',
  '58.211.2.0/24',
  '117.34.13.0/24',
  '112.25.90.0/24',
  '119.188.9.0/24',
  '115.231.186.0/25',
  '125.39.239.0/24',
  '113.207.101.0/25',
  '111.32.135.0/25',
  '183.61.177.0/24',
  '183.61.236.0/24',
  '42.81.6.0/25',
  '220.170.185.160/27',
  '157.255.24.160/27',
  '122.190.2.160/27',
);
$wgSquidServersNoPurge = array('127.0.0.1');

1.34之後的版本:

$wgUseCdn = true;
$wgCdnMaxAge = 86400;
$wgCdnServersNoPurge = array(//百度雲加速部分IP段
  '59.51.81.128-191',
  '61.182.137.0/25',
  '42.236.93.0/24',
  '58.211.2.0/24',
  '117.34.13.0/24',
  '112.25.90.0/24',
  '119.188.9.0/24',
  '115.231.186.0/25',
  '125.39.239.0/24',
  '113.207.101.0/25',
  '111.32.135.0/25',
  '183.61.177.0/24',
  '183.61.236.0/24',
  '42.81.6.0/25',
  '220.170.185.160/27',
  '157.255.24.160/27',
  '122.190.2.160/27',
);

2、用戶真實IP,我們先是通過修改LocalSettings.php,加入對$_SERVER中傳值的判斷:

if (isset($_SERVER['HTTP_CF_CONNECTING_IP'])) {
    $_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_CF_CONNECTING_IP'];
} elseif (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
    $_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_X_FORWARDED_FOR'];
}

這個辦法可以實現獲取真實IP,但有安全隐患,也不是很規範,後來嘗試在Apache安裝mod_cloudflare後就可以不用這樣設置了,但這個模塊對其它CDN(例如百度雲加速)無效,就改為了在Apache安裝mod_remoteipApache 2.4是直接啟用mod_remoteip,我們現在的Apache 2.2是下載mod_remoteip-httpd22安裝)

3、html頁面不緩存的問題:

在百度雲加速中設置了規則來緩存HTML頁面卻發現無效,百度雲加速對于Cache-Control中的no-cache, private, max-age=0等标簽是遵守的,所以不緩存。

我們在CloudFlare中設置了規則來緩存HTML頁面,就發現可以生效,很可能是因為默認情況下,規則中的“源站控制緩存設置”是關閉了,CloudFlare的設置覆蓋了源站緩存設置。

要想讓百度雲加速也緩存html,我們嘗試了一個不規範但可以馬上有效的辦法:修改includes/OutputPage.php,替換掉原來的private等設置就可以,以後也許還會嘗試出來更規範、合理的辦法。

4、編輯不影響用戶浏覽:

我們采用了與Drupal類似的策略,為編輯者設置一個單獨的二級域名,使用與源站域名相同的數據庫等設置,這樣内部編輯人員看到的内容不會被緩存,也不影響普通用戶浏覽了。

5、緩存清理:

目前還是靠CDN後來來清理,以後會做點開發,在合适的時候和地方調用CDN清理緩存的API來實現。

先記錄到這裡,後面有更多内容再補充記錄。

發表新回應

Plain text

  • 不允許使用 HTML 標籤。
  • 自動將網址與電子郵件地址轉變為連結。
  • 自動斷行和分段。