如何在 Ubuntu 上設定 Nginx FastCGI 快取

Nginx FastCGI 快取透過減少 Ubuntu 伺服器上的負載來提高網站的效能。它對於動態內容特別有效,允許 Nginx 直接提供快取內容,而無需使用 PHP 處理器。這可以加快回應時間並降低資源使用率。以下是 Nginx FastCGI Cache 對於您的 Web 基礎架構的主要功能和優點:

  • 高效率的內容交付: Nginx FastCGI 快取儲存動態內容輸出,從而實現更快的存取和分發。
  • 減少伺服器負載: 提供快取內容可以最大限度地減少 PHP 呼叫次數,從而減輕伺服器的負載。
  • 可擴充性: Nginx FastCGI 快取有助於管理增加的流量,而不會隨著網站的成長而影響速度。
  • 可自訂的緩存: 此選項可靈活地設定快取過期、繞過和更新條件以滿足您的需求。
  • 改進的使用者體驗: 更快的網站載入時間可以改善用戶體驗,對訪客保留和 SEO 排名產生正面影響。
  • 資源優化: 優化伺服器資源的利用率,從而更有效地處理並發請求。
  • 輕鬆調試: 提供簡單的機制來調試和驗證快取內容,確保平穩運行。
  • 相容性: 與流行的 CMS 平台無縫協作,無需大量配置即可增強其效能。

當我們進入技術指南時,請記住,實施 Nginx FastCGI 快取是提高網站效率和使用者滿意度的策略方法。讓我們開始使用 Nginx FastCGI 快取增強網站的效能。

設定 Nginx FastCGI 快取

編輯 FastCGI 快取的 Nginx 設定文件

開啟設定檔

首先,您需要打開 nginx.conf 文件。我們將使用 nano 文字編輯器,但您可以使用任何您喜歡的文字編輯器。輸入這個指令:

sudo nano /etc/nginx/nginx.conf

配置FastCGI參數

在檔案內,找到 HTTP 區塊並新增以下行:

fastcgi_cache_path /var/nginx/fastcgi_cache levels=1:2 keys_zone=fcgicache:150m max_size=20g inactive=60m use_temp_path=off;
fastcgi_cache_key "$scheme$request_method$host$request_uri";

輸入行後,按 CTRL + O, 類型 Y,然後按 CTRL + X 退出。

了解 FastCGI 參數

  • fastcgi_cache_path:此參數設定儲存FastCGI快取的位置(/var/nginx/fastcgi_cache)。它很重要,因為它決定了快取內容的駐留位置。
  • levels=1:2:這會在您的快取位置下建立一個兩級目錄層次結構。這種設計有助於將檔案分散到兩個目錄中,從而降低磁碟 I/O 瓶頸的風險。
  • keys_zone:指定共享記憶體區域的名稱(fcgicache)及其大小(150M)。共享記憶體區域對於儲存快取鍵和元資料至關重要。
  • max_size:這定義了快取的最大大小(在本例中, 20GB)。當達到此限制時,最舊的檔案將被刪除,以便為新檔案騰出空間。
  • inactive:指定多長時間後未存取的資料將從快取中刪除。在此範例中,它設定為 60 分鐘。
  • use_temp_path:將其設定為 off 指示 Nginx 將檔案直接寫入指定的快取資料夾,繞過臨時儲存區域的使用。
  • fastcgi_cache_key:用於定義快取查找的鍵。 Nginx 建立此金鑰的 MD5 雜湊值以用作快取檔案的名稱。

為 FastCGI 快取配置 Nginx 伺服器區塊

編輯伺服器區塊文件

接下來,您需要編輯伺服器區塊檔案。對於此範例,我們假設該檔案名為 example.com.conf。使用以下命令打開它:

sudo nano /etc/nginx/sites-available/example.com.conf

插入 FastCGI 快取指令

假設您已安裝 LEMP,請在 PHP 檔案的位置區塊中插入以下行:

fastcgi_cache fcgicache;
fastcgi_cache_valid 200 60m;
fastcgi_cache_use_stale error timeout updating invalid_header http_500 http_503;
fastcgi_cache_min_uses 1;
fastcgi_cache_lock on;
add_header X-FastCGI-Cache $upstream_cache_status;

了解 FastCGI 快取指令

  • fastcgi_cache:啟用快取並指定先前定義的共享記憶體區域。
  • fastcgi_cache_valid:定義特定 HTTP 狀態碼的快取持續時間。
  • fastcgi_cache_use_stale:設定 Nginx 可以使用陳舊快取回應的條件。
  • fastcgi_cache_min_uses:指定在快取回應之前必須請求回應的頻率。
  • fastcgi_cache_lock:確保一次只有一個請求填充新的快取元素,從而防止「快取踩踏」。
  • add_header:新增自訂標頭(X-FastCGI-Cache) 到 HTTP 回應,指示回應是否是從快取提供的。

在 Nginx 上設定 FastCGI 快取清除

設定快取清除

快取清除可讓您在快取過期之前從快取中刪除內容。若要設定快取清除,請透過在伺服器區塊檔案中插入下列行來建立快取清除指令:

location ~ /purge(/.*) {
    # Uncomment the following two lines to allow purge only from the webserver
    allow 127.0.0.1;
    deny all;
    fastcgi_cache_purge fcgicache "$scheme$request_method$host$1";
}

CTRL + O, 類型 Y,然後按 CTRL + X 退出文字編輯器。

快取清除問題的替代方法

如果您遇到快取清除問題,您可以調整快取過期時間。對於中到高流量的網站,設定較低的過期率,例如 2 小時不活動和 4 小時整體過期,通常會更有效。

測試並重新啟動 Nginx 伺服器

測試配置

驗證 Nginx 設定以避免語法錯誤或設定錯誤至關重要。使用以下命令:

sudo nginx -t

如果一切正確,您應該看到以下輸出:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

重新啟動 Nginx 伺服器

最後,重新啟動 Nginx 伺服器以應用您所做的變更:

sudo systemctl restart nginx

建立和最佳化 Nginx FastCGI 快取目錄

建立FastCGI快取目錄

現在讓我們建立 Nginx 儲存快取檔案的目錄。該路徑已在前面指定 nginx.conf 文件:

sudo mkdir -p /var/nginx/fastcgi_cache

使用 tmpfs 優化快取目錄(可選)

如果您的系統有足夠的 RAM,您可以選擇使用 tmpfs 將快取儲存在記憶體中。與磁碟儲存相比,這可以縮短存取時間。但是,請務必小心,因為儲存在 RAM 中可能會消耗大量記憶體資源。以下是如何將快取目錄掛載為 tmpfs:

編輯 /etc/fstab 文件:

sudo nano /etc/fstab

在文件末尾新增以下行:

tmpfs   /var/nginx/fastcgi_cache   tmpfs   defaults,size=512M   0 0

這將為快取分配 512MB RAM。您可以根據您的系統資源相應調整大小。

安裝 tmpfs:

sudo mount -a

此配置可確保 FastCGI 快取儲存在記憶體中,以犧牲 RAM 利用率為代價提供更快的效能。

驗證 Nginx FastCGI 快取功能

使用curl測試FastCGI緩存

您可以使用以下命令驗證 FastCGI 快取是否正常運作 curl 命令。根據您的快取設置,您可能需要多次運行該命令才能看到快取命中:

curl -I http://www.your-domain.com

如果你沒有 curl 已安裝,您可以使用以下命令安裝它:

sudo apt install curl -y

在輸出中,尋找 X-FastCGI-Cache: HIT 標頭:

~$ curl -I https://www.example.com/
HTTP/1.1 200 OK
...
X-FastCGI-Cache: HIT
...

這表示該請求是從快取中提供的。

配置快取排除

不應快取 WordPress 管理頁面、評論部分和網站地圖等網站元素。要設定 Nginx 不快取這些,請在上面新增以下程式碼 location (~\.php$) 伺服器區塊檔案中的行:

# Cache by default
set $skip_cache 0;

# Don't cache URIs containing the following
if ($request_uri ~* "/wp-admin/|/xmlrpc.php|wp-..php|^/feed/|/tag/./feed/|index.php|/.sitemap..(xml|xsl)") {
    set $skip_cache 1;
}

# Don't cache for logged-in users or comment authors
if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_logged_in") {
    set $skip_cache 1;
}

# POST requests and URIs with a query string should bypass the cache
if ($request_method = POST) {
    set $skip_cache 1;
}

if ($query_string != "") {
    set $skip_cache 1;
}

調試緩存排除(可選)

如果您想要新增註釋以進行偵錯,您可以在每個註釋下新增自訂註釋 set $skip_cache 1; 像這樣的聲明:

set $skip_reason "your custom note";

這對於理解為什麼在故障排除期間未快取某些內容非常有用。

完成這些配置後,請確保測試配置並重新啟動 Nginx:

sudo nginx -t
sudo systemctl restart nginx

Nginx FastCGI 快取的最佳實務和注意事項

雖然 FastCGI 快取可以提供顯著的效能優勢,但必須確保配置針對您的特定用例和伺服器資源進行最佳化:

  • 在選擇之前評估可用的 RAM 量 tmpfs 用於緩存。確保您的伺服器有足夠的記憶體用於其他關鍵進程。
  • 定制緩存排除以適合您的應用程式。提供的範例專門針對 WordPress,但您可能需要針對其他類型的應用程式進行不同的排除。
  • 定期監控快取使用情況和效能。如果快取消耗過多磁碟空間或未如預期提高效能,請考慮相應調整快取路徑、大小或設定。

結論

好吧,你已經找到了!我們已經完成了在 Ubuntu 伺服器上安裝 Nginx FastCGI 快取的步驟,透過有效處理動態內容來提高網站的效能。請記住,維護快取設定以滿足網站的需求是實現效益最大化的關鍵。不要迴避調整設定來找到最佳位置。無論您是經驗豐富的專業人士還是伺服器管理新手,我們希望本指南能夠成為優化您的網路形象的得力助手。保持簡單,保持一致,為您和您的訪客提供更快、更流暢的網站體驗!

Joshua James
跟我來
Joshua James 的最新帖子 (看全部)

發佈留言