Select Page

在Nginx中支援 WordPress 的 Webp,Avif 圖檔

大前提你要先安裝有支援 webp, avif 的外掛,例如EWWW, Convert Media等等

在 Nginx 配置中加 map 指令

  • 在 Nginx 的主配置文件,通常在 /etc/nginx/nginx.conf
  • http {} 内、server {} 之前,加入以下内容:
map $http_accept $avif_suffix {
    default "";
    "~*avif" ".avif";
}
map $http_accept $webp_suffix {
    default "";
    "~*webp" ".webp";
}
  • 配置客户端的 Accept ,來定義 $avif_suffix$webp_suffix 變量,確認是否支持 AVIF 或 WebP 格式。

Nginx 讀取 AVIF 和 WebP 的 MIME Type

找到 /etc/nginx/mime.types

image/avif  avif;
image/webp  webp;

在站點配置中設定重導向

  • 找到 /etc/nginx/sites-available/yourdomain
  • server {} ,加入以下内容:
location ~* ^/wp-content/.+\.(jpe?g|png|gif)$ {
    add_header Vary Accept;
    add_header Cache-Control "private";
    expires 365d;
    try_files $uri$avif_suffix $uri$webp_suffix $uri =404;
}

作用是:

  • 匹配所有請求的 .jpg.jpeg.png.gif 文件。
  • Vary: Accept ,告訴缓存系統按照 Accept 來區分不同的響應。
  • 缓存控制和過期時間。
  • 使用 try_files 指令,會先試提供的 .avif 文件,如果不存在,則提供 .webp 文件,若仍不存在,則提供原始文件。

測試並且重新加載 Nginx 配置

sudo nginx -t
sudo systemctl reload nginx

這些配置假設您的 .avif.webp 文件與原始圖片文件位於相同的目錄,並具有相同的文件名,只是副檔名不同(例如,image.jpg 對應 image.jpg.avifimage.jpg.webp)。

此外,請確保您的伺服器上已經存在對應的 .avif.webp 文件,否則 Nginx 將返回 404 錯誤。

有關更多詳細資訊,您可以參考以下資源:

網站圖片無縫兼容 WebP/AVIF

在 Nginx 上提供 WebP 和 AVIF 圖片

圖片優化新選擇!WebP、AVIF 如何提升網站速度

WordPress – wp-rocket nginx 設定

如果你也是 wordpress 愛用 WP Rocket 的使用者,並且WEB SERVER是用 NGINX 架設的,那肯定要參考這個 GitHub 項目,來作為你 Nginx 以及伺服器上面的最佳設定

安裝

先從 github 中下載下來

cd /etc/nginx
git clone https://github.com/satellitewp/rocket-nginx.git

並且利用 PHP 產生預設的配置檔

cd rocket-nginx
cp rocket-nginx.ini.disabled rocket-nginx.ini
php rocket-parser.php

設定 Nginx

找到 nginx 的設定檔,通常在 /etc/nginx/sites-available ,並且加入設定

server {
  ...
  
  # Rocket-Nginx configuration
  include rocket-nginx/conf.d/default.conf;
  
  ...
}

項目位置

GitHub Rocket-nginx

資料庫-每日自動備份-Ubuntu-MariaDB

今天來實做一個備份任務,要在 Ubuntu 上設定每日凌晨 4:00 自動備份 MariaDB 中的所有資料庫,我們可以使用 cron 和一個自定義的 Shell 腳本來完成這個任務,以下是詳細步驟和代碼:

步驟 1:創建備份腳本

先創建一個備份 Shell Script,這個腳本將備份所有資料庫並分開儲存。

1.在 /usr/local/bin 目錄下創建一個新的 Shell 腳本:

    sudo nano /usr/local/bin/backup_mariadb.sh

    2. Script 的內容指令如下

    #!/bin/bash
    
    # 設定資料庫的用戶名和密碼
    DB_USER="your_db_user"
    DB_PASSWORD="your_db_password"
    DB_HOST="10.0.0.1"
    
    # 設定備份儲存目錄
    BACKUP_DIR="/path/to/backup/dir"
    mkdir -p $BACKUP_DIR
    
    # 獲取當前日期和時間
    CURRENT_DATE=$(date +%Y-%m-%d-%H-%M-%S)
    
    # 獲取所有資料庫名稱
    DATABASES=$(mysql -h$DB_HOST -u$DB_USER -p$DB_PASSWORD -e "SHOW DATABASES;" | tr -d "| " | grep -v Database)
    
    # 備份每個資料庫
    for DB in $DATABASES; do
      if [[ "$DB" != "information_schema" && "$DB" != "performance_schema" && "$DB" != "mysql" && "$DB" != "sys" ]]; then
        BACKUP_FILE="$BACKUP_DIR/$CURRENT_DATE-$DB.sql"
        mysqldump  -h$DB_HOST -u$DB_USER -p$DB_PASSWORD --databases $DB > $BACKUP_FILE
      fi
    done

    其中要修改的有

    • DB_HOST : 要改成自己的
    • your_db_user : 資料庫中有備份權限的使用者 ID
    • your_db_password : 密碼
    • BACKUP_DIR=”/path/to/backup/dir” : 要改成你要存放的路徑,像是 /var/backup_db/

    3.將 .sh 變成可執行擋

    sudo chmod +x /usr/local/bin/backup_mariadb.sh

    步驟 2:設置 Cron 任務

    1.打開 cron

    crontab -e

    2.加入設定內容,要注意的是實間是主機時間,通常主機是 UTC+0 的時區,要注意轉換,才會是正確的當地時間,可以參考這篇

    0 4 * * * /usr/local/bin/backup_mariadb.sh

    這樣就會在每天的早上四點去備份資料庫了

    加入每一個SQL檔案都可以被壓縮的功能

    程式碼區塊要改成下面這一個

    # 備份每個資料庫並壓縮
    for DB in $DATABASES; do
      if [[ "$DB" != "information_schema" && "$DB" != "performance_schema" && "$DB" != "mysql" && "$DB" != "sys" ]]; then
        BACKUP_FILE="$BACKUP_DIR/$CURRENT_DATE-$DB.sql"
        ZIP_FILE="$BACKUP_DIR/$CURRENT_DATE-$DB.zip"
        mysqldump -h$DB_HOST -u$DB_USER -p$DB_PASSWORD --databases $DB > $BACKUP_FILE
        zip $ZIP_FILE $BACKUP_FILE
        rm $BACKUP_FILE
      fi
    done

    刪除舊資料

    可以利用下面的指令,放在程式碼的最後面

    # 刪除兩天前的備份文件
    find $BACKUP_DIR -type f -name "*.zip" -mtime +2 -exec rm {} \;

    需要改時間的話,只要修正 -mtime +2 ,把+2改成自己需要的時間

    參考資料

    https://help.ubuntu.com/community/CronHowto

    Nginx proxy_cache 進階設定,放飛你的 wordpress 主機

    定義 proxy cache path

    先找到設定檔,通常在

    sudo nano /etc/nginx/nginx.conf

    找到 http ,在他的配置中設定

    http {
        proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;
    
        ...
    }


    緩存配置

    • 緩存文件儲存的路徑: /path/to/cache
    • 緩存目錄的層級: 1:2
    • 緩存區域的名稱和大小: my_cache:10m
      • 緩存區域名稱: my_cache
      • 緩存區域大小: 10MB
    • 緩存的最大大小: 10GB
    • 在指定的時間內沒有被訪問的緩存文件將被刪除: 60m
    • 直接在緩存路徑上操作,而不是使用臨時路徑: off

    詳細說明

    • 緩存文件儲存的路徑

    緩存文件將儲存在指定的目錄中。您可以根據您的需求設置此路徑。

    • 緩存目錄的層級

    此設置控制緩存目錄的層級結構。例如,設置為 1:2 表示將使用兩個層級的目錄來儲存緩存文件。第一層級將包含 10 個子目錄,第二層級將包含 100 個子目錄。

    • 緩存區域的名稱和大小

    此設置控制緩存區域的名稱和大小。緩存區域是緩存文件的分組。您可以根據您的需求設置多個緩存區域。

    • 緩存的最大大小

    此設置控制緩存的最大大小。超過此大小時,最舊的緩存文件將被刪除。

    • 在指定的時間內沒有被訪問的緩存文件將被刪除

    此設置控制在指定的時間內沒有被訪問的緩存文件將被刪除。

    • 直接在緩存路徑上操作,而不是使用臨時路徑

    修改設定檔,配置 proxy cache

    找到 config 中的 server ,在裡面添加相關設定

    server {
        listen 80;
        server_name yourdomain.com;
    
        location / {
            proxy_pass http://your_backend_server;
            proxy_cache my_cache;
            proxy_cache_revalidate on;
            proxy_cache_min_uses 1;
            proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
            proxy_cache_lock on;
            proxy_cache_valid 200 302 10m;
            proxy_cache_valid 404 1m;
        }
    }

    反向代理配置

    • 後端伺服器的地址: proxy_pass
      • 此設置指定後端伺服器的地址。後端伺服器是 Nginx 將請求轉發到的伺服器。
    • 使用之前定義的緩存區域: proxy_cache
      • 此設置指定要使用的緩存區域。緩存區域是 Nginx 用於儲存靜態內容的區域。
    • 啟用後,會在緩存過期時向後端伺服器驗證緩存內容是否仍然有效: proxy_cache_revalidate
      • 此設置控制是否在緩存過期時向後端伺服器驗證緩存內容是否仍然有效。默認情況下,Nginx 將在緩存過期時直接使用緩存內容。
    • 在緩存內容之前,請求必須達到指定的次數: proxy_cache_min_uses
      • 此設置控制在緩存內容之前,請求必須達到指定的次數。這可以防止頻繁更新的內容被緩存。
    • 在後端伺服器錯誤或超時時,使用舊的緩存數據: proxy_cache_use_stale
      • 此設置控制在後端伺服器錯誤或超時時是否使用舊的緩存數據。默認情況下,Nginx 將在後端伺服器錯誤或超時時向客戶端返回錯誤。
    • 在更新緩存內容時,防止多個請求同時向後端伺服器發送: proxy_cache_lock
      • 此設置控制在更新緩存內容時是否防止多個請求同時向後端伺服器發送。這可以防止後端伺服器過載。
    • 設定不同響應狀態碼的緩存時間: proxy_cache_valid
      • 此設置控制不同響應狀態碼的緩存時間。您可以根據您的需求設置不同的緩存時間。

    重新開啟 Nginx 讓設定生效

    sudo nginx -t
    sudo systemctl reload nginx

    快取的時間設定

    Nginx 支持多種時間單位来指定 cache 的有效期,这包括:

    • s
    • m 分鐘
    • h 小時
    • d
    • w
    • M 月(30 天)
    • y 年(365 天)

    舉例子

    快取檔案 30 秒

    proxy_cache_valid 200 302 30s;
    

    刪除快取的方法

    1.直接刪除快取檔案

    找到你設定的路徑,直接刪除檔案即可

    sudo rm -rf /path/to/cache/*

    2.使用 Nginx Cache Purge

    如果你在編譯 Nginx 有加入 cache purge ,就可以用下面的設定,如果你是用預設安裝,通常不包含 cache purge,可以看下我之前的安裝教學

    location /purge_cache/ {
        proxy_cache_purge my_cache $scheme$host$request_uri;
    }
    使用 WP-CLI 管理 WordPress

    使用 WP-CLI 管理 WordPress

    WordPress 是全球最受歡迎的內容管理系統之一,提供了直觀的圖形使用者介面來管理網站。然而,對於開發者系統管理員來說,通過命令列介面管理 WordPress 也是非常必要的。這就是 WP-CLI 發揮作用的地方。WP-CLI 是一個為 WordPress 站點提供的命令列工具,允許用戶快速執行許多任務,如安裝和更新插件、配置多站點安裝、生成內容等,而無需使用 Web 瀏覽器。

    WP-CLI 的優勢

    • 效率:通過命令列執行任務通常比使用圖形使用者介面更快。
    • 自動化:可以輕鬆地將命令腳本化和自動化,以便批量處理任務。
    • 無需 GUI:對於僅命令列介面訪問的伺服器,這是管理 WordPress 站點的理想選擇。

    安裝 WP-CLI

    WP-CLI 的安裝過程簡單直接,可以通過幾個簡單的步驟在任何類 UNIX 系統上安裝(包括 MacOS、Linux 發行版和 Windows 的 WSL)。

    下載 WP-CLI: 首先,使用 curlwget 命令下載 WP-CLI 的 Phar 檔案。

    使用 curl:

    curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar

    或者使用 wget:

    wget https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar

    驗證 Phar 檔案是否可執行: 執行以下命令測試 wp-cli.phar 是否正常工作:

    php wp-cli.phar --info

    將它變成執行檔: 將下載的檔案轉換為可執行檔案,並移動到全域路徑中,以便從任何位置訪問 WP-CLI。

    chmod +x wp-cli.phar
    sudo mv wp-cli.phar /usr/local/bin/wp

    驗證及測試WP-CLI: 輸入以下命令以確認 WP-CLI 正確安裝:

    wp --info

    會看到結果如下

    以下示範一些簡單的功能

    檢查 WordPress 核心檔案更新

    wp core check-update

    安裝插件

    wp plugin install [plugin-name] --activate

    更新單一外掛

    wp plugin update [plugin-name]

    更新所有插件

    wp plugin update --all

    創建新的用戶

    wp user create bob [email protected] --role=author