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

·

WordPress Media 媒體庫

Photo by Saffu on Unsplash

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

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

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

備份網站和數據庫

在改變 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 外掛

https://wordpress.org/plugins/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 外掛

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 媒體庫?

教學網站或旅遊、美食這一類的部落格網站,時間久了,WordPress 媒體庫圖片會越來越多,達到 10G ~ 20G 容量都有可能,把圖片分離出來,網站備份時可以大幅降低主機負載,以後遷移主機,也會好處理。

精選圖片可以顯示嗎?

精選圖片一樣可以顯示,在 Flatsome 和 CSSIgniter 主題佈景測試過,不會有問題,可以參考我的 DEMO 網站。

圖片有需要做 301 重定向 (redirect)?

我處理過兩個上萬張圖片的網站,並沒有做 301 重定向 (redirect),半年後觀察網站搜尋,排名並沒有影響,使用圖片搜尋方式,也沒有影響;我不是 SEO 專家,如果您對這一方面有疑慮,可以詢問 SEO 這一方面的專家。

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/

Comments

在〈使用子網域儲存 WordPress Media 媒體庫〉中有 10 則留言

  1. 「Aubrey」的個人頭像

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

    1. 「yungke」的個人頭像

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

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

    2. 「yungke」的個人頭像

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

  2. 「An」的個人頭像

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

    1. 「yungke」的個人頭像

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

  3. 「Air」的個人頭像

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

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

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

  4. 「yungke」的個人頭像

    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號碼嗎?
    不好意思,這些都是非常新手的問題,還請您見諒。
    非常感謝您的幫助

    1. 「yungke」的個人頭像

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

    2. 「yungke」的個人頭像

      Q1:在 DNS 新增一個子域名的 A 紀錄,IP 與主域名是一樣的。
      Q2:不須重定向

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

Your Mastodon Instance