使用子網域儲存 WordPress Media 媒體庫

使用子網域來儲存 WordPress 媒體庫圖片 (Media Library),在 HTTPS 時代之前,是為了增加網頁加載的速度;現在網頁技術一直進步,這麼做,是為了方便管理媒體庫圖片,更重要的是可以縮短備份的時間,減低主機 CPU 負載。

之前我有寫過類是的文章,事隔已久,外掛已更新到更好用,已經不需要再到 MySQL 更改圖片的上傳路徑,外掛啟動後,將子網域路徑輸入就完成了,連同之前上傳的圖片,一併幫你更改好。

早先寫的 WordPress 媒體庫文章

本次的說明,只可以在同一個主機進行,不同的主機使用子網域儲存 WordPress Media,又是不同的方法,不在本次的說明中。

注意:這一篇文章是 2018 年寫的,當時的環境與現在 2021 年的時空背景不太同了。簡單的說,現在的觀念與主機技術都大幅的提升。
建議使用高級的主機 (如 Kinsta),處理主機負載和網站備份的問題。
另外,如果你真想要分離媒體庫,建議安裝外掛,分離到 AWS S3 或 Google Cloud Storage 雲端空間。

備份網站和數據庫

在改變 WordPress 媒體庫路徑之前,請先備份網站,若有執行出錯時,還可以還原網站;可利用 UpdraftPlus Plugin 先做一次備份,或先導出資料庫。

創建一個子網域

虛擬主機可以利用 cPanel 來創建,或使用 DNS 管理來創建一個子網域。例如:imgur.yungke.me,A 紀錄指向同一個主機 IP。

注意:最好子網域也安裝 HTTPS 加密證書,避免主網域造成混合內容。

DNS Subdomain Images

WordPress 中更改變圖片上傳的位置

WordPress 3.5 版本之後,默認媒體存儲位置的設置已被刪除,為了方便我們更改圖片上傳到子網域的路徑,需要安裝一個輕量 WP Original Media Path 外掛,來恢復此項功能。

WP Original Media Path 外掛

啟用後,輸入以下詳細配置,如圖:

WP Original Media 配置

上傳的檔案將儲存於此目錄:完整的 URL 文件路徑,/data/wwwroot/imgur.yungke.me/images (這是您的子域名路徑,請更改域名為您的子域名)

完整的檔案網址:請填入子域名的網址,如 https://imgur.yungke.me/images (請更改域名為您的子域名)

儲存配置,步驟到這邊就可以實現圖片與主網站分開存放,往後您在媒體庫上傳圖片時,圖片真實存放在子網域的 images 文件夾內。

移動 uploads 資料夾

將現在運行中的網站圖片移動到新的 (子網域) 圖片文件夾 images 內,利用 FileZilla 的 FTP 軟體,將 /wp-content/uploads/ 中的所有文件移動到子網域 /images 內,移動過程中請保持目錄結構。

步驟到此,就已經完成使用子網域儲存 WordPress Media 媒體庫,不管是已經使用很久的網站,或剛新建的網站,整個 WordPress 圖片路徑都已經更換成子網域了,不需要再動到數據庫打入代碼,更換圖片路徑。

網站的備份

已經將很肥大的 uploads 資料夾搬移走後,在做網站備份時,就不須再備份 uploads,以 UpdraftPlus 外掛為例:

UpdraftPlus 外掛

在設置頁面將「備份 uploads」的勾勾取消,如圖:

UpdraftPlus 外掛配置

保存配置後,下次 UpdraftPlus 執行網站備份時,就不會備份 uploads 資料夾。

如果是 VPS 主機,可以單獨備份子網域 uploads 資料夾到另一台備份主機裡,可使用 rsync 指令:

rsync -avu --progress --delete /data/wwwroot/imgur.yungke.me/ root@107.172.xx.xxx:/data/wwwroot/imgur.yungke.me/

備份主機 SSH 端口如果有變更,指另如下:

rsync -avu -e "ssh -p 12345" --progress --delete /data/wwwroot/imgur.yungke.me/ root@107.172.xx.xxx:/data/wwwroot/imgur.yungke.me/

其他問題

WordPress Media 媒體庫教學系列文章:

1. WP Offload S3 Lite 外掛來儲存 WordPress 媒體庫

2. WordPress + Chevereto 圖床軟體來管理媒體庫

3. 如何優化 WordPress 媒體庫圖片

2019/07/25 補充:

有讀者跟我反應,依照上述的教學,媒體庫的圖片無法顯示?

這個外掛有個限制,主網域和子網域要在同一台主機裡才行

另外,Store uploads in this folder 的設置路徑是你的子網域的完整路徑。

有的共享主機會有防止跨站攻擊的安全防護,請向託管商查明,如有這個保護,就無法使用子網域儲存圖片的方法。

我重新建置一個 DEMO 網站,可以參考,有任何問題歡迎一起研究:

http://hi.yungke.me/

Featured Photo by david henrichs on Unsplash

預設圖片
yungke
視咖啡如命的癮君子,沒有厲害的技術,只會小打小鬧的電腦工程師。WooWP Managed WordPress hosting 與 Kinsta 合作,推出最優惠、穩定的 GCP 主機方案,了解更多>>
文章: 153

10 則留言

  1. 版主你好,我是使用easy engine搭建VPS環境後 以上述的方法進行設定
    圖片能從主網域媒體庫成功傳送到子網域,但是在主網域寫文章時候,媒體庫的圖片都顯示不出來,也無法成功插入顯示…

    • 檢查一下子網域的目錄權限..
      或用下面的指令 (Subdomain 更改為你的子網域)

      chown -R www-data:www-data /var/www/Subdomain.com/htdocs

    • 在 Store uploads in this folder 的路徑最前面請加上 / 號,就會正常上傳顯示了。
      如果還是不行,請檢查是否有防止跨站寫入的安全防護。

  2. 我的網域、子網域都在同一個主機,透過上述方式設定,上傳的照片連結確實是在子網域沒錯,但是媒體櫃中無法預覽圖片,求解

    • 大部分問題是在 WP Original Media Path 外掛設置裡路徑是否正確。
      如果你是用共享主機,可以發個客服單詢問,VPS 主機與共享主機的主機的路徑有所不同。

  3. 非常感謝Yungke的介紹!幫了大忙!
    我是一個WP新手,尋找這個問題的解決方法好久了><
    在安裝時遇到
    1.WP Original Media Path 無法安裝,它說"這個外掛無法執行於目前版本的 PHP 執行環境。 進一步瞭解更新 PHP 執行環境。"請問是什麼意思呢?

    2.我也有安裝UpdraftPlus ,主網域和子網域都在同一台主機。請問要如何備份子網域的圖片呢?在備份時,取消upload,是為了避免重複備份嗎?因為它會備份WordPress的資料夾跟資料庫,而上傳到子網路的images就在/public_html裡,所以已經備份了嗎?

    3.請問如何在本地端命名和分類資料夾,以及圖片,往後在備份和管理上才是正確的觀念呢?

  4. 1. 檢查你的 PHP 版本是否太低,WP Original Media Path 要求的 PHP 版本是 PHP7.0 以上;在 WP 後台 > Tools > Site Health 的 info 頁面的 server 那一欄,查看你目前的 PHP 的版本。

    2. 如果你成功將媒體庫分離到子網域後,主網域的 UpdraftPlus 在「設定」部分,將 Uploads 的勾勾取消;子網域的圖片備份部分請使用你的主機商的備份機制。

    3. 在本地端 (所謂的本機 PC 嗎?),我會與 WordPress 的相同方式,用月份來管理我的圖片,如果哪一篇文章要更換圖片或補圖片,看一下發文日期,就可以在本地端 (PC) 很快的找到圖片。

  5. 非常感謝Yungke的分享,我本身是寫美食部落格。
    知道之後會有大量的圖片,所以想先在圖片還沒那麼多的時候,將圖片轉到子域網。
    我有依照您的步驟走,有看到媒體庫有我要轉的網址。
    不過一點開網站,我的圖片都無法顯示。
    我的網域和子域網是在同一個主機裡,想請問
    1.將子域網A紀錄指向同一個主機IP裡,是指DNS中的@的IP號嗎?
    2.請問是在Redirect那轉IP號碼嗎?
    不好意思,這些都是非常新手的問題,還請您見諒。
    非常感謝您的幫助

    • 現在時空背景的不同,其實我不建議用子網域來存放媒體庫了。
      對於美食、旅遊的網站,大量的圖片 (尤其是 WordPress 系統),的確,會有主機負載、備份、遷移的問題,技術困難度也會增高。
      所以,我會建議:
      1. 使用高品質的主機 Kinsta,(省掉備份、主機負載的煩惱)
      2. 使用 AWS S3 桶或 Google Cloud Storage 來存放媒體庫,都有外掛可以簡單實現。
      上述的所花的費用,與子網域方式所花的費用差不多 (主機空間、異地備份都需額外費用)。
      尤其對新手來說,可以省掉很多的技術問題。

發佈留言