如何使用 Nginx 和 PHP 啟用服務器端 FastCGI 緩存

Nginx 是一個開源的高性能 Web 服務器,可用於加速內容和應用程序交付。 Nginx 增強了安全性,提高了可擴展性,還可以用作高可用性負載均衡器。 它可以用作反向代理,Nginx 最重要的用途之一是內容緩存。 最好的方法之一是使用 Nginx 作為內容緩存。 在本文中,我們將討論 Nginx FastCGI 內容緩存以提高網站的性能。

在 Nginx 中啟用 FastCGI 緩存

在本文中,我們假設您已經在 Linux 機器上安裝了帶有 PHP 的 Nginx。

要開始啟用 FastCGI 緩存,請編輯要啟用緩存的虛擬主機配置文件。

$ cd /etc/nginx/conf.d $ vi example.conf

將以下內容添加到文件頂部。 請記住,線條應該在 服務器 {} 指令.

fastcgi_cache_path /etc/nginx/cache levels=1:2 keys_zone=MYAPP:100m inactive=60m; fastcgi_cache_key “$scheme$request_method$host$request_uri”;

在哪裡,

  • fastcgi_cache_path – 緩存的位置
  • 水平 – 緩存層級,在/etc/nginx/cache下設置兩級目錄層級
  • 鍵區 – 內存區域名稱(在此 example 我用過MYAPP。 可以有自己的喜好)
  • 不活躍 – 指定在指定時間內未訪問的緩存數據從緩存中刪除的時間。 在這 example,非活動時間設置為60m,可增加或減少。
  • fastcgi_cache_key – 它指定如何散列緩存文件名

factcgi_cache_key 中使用的變量

  • $scheme – 請求方案 HTTPS 或 HTTP
  • $request_method – 指定請求方法,例如 GET 或 POST
  • $host – 與請求匹配的服務器名稱
  • $request_uri – 完整的請求 URI

緩存文件的位置可以在硬盤的任何位置,但大小應小於系統的RAM+swap,以避免“無法分配內存”的問題。

現在轉到將 PHP 請求傳遞給 php-fpm 的位置指令。 在“location ~ .php$ {}”中添加以下幾行

fastcgi_cache MYAPP; fastcgi_cache_valid 200 1m;

其中 MYAPP 是內存區域名稱, fastcgi_cache_valid 200 緩存所有 HTTP 200 響應。

如果只定義了時間,則緩存 200、301 和 302 響應。

運行以下命令來測試 Nginx vhost 配置。

$ nginx -t

測試nginx配置語法

現在重新啟動 Nginx 服務。

$ systemctl 重啟 nginx

一個完整的 vhost 配置文件看起來像

fastcgi_cache_path /etc/nginx/cache levels=1:2 keys_zone=MYAPP:100m inactive=60m; fastcgi_cache_key “$scheme$request_method$host$request_uri”; 服務器 { 聽 80; 根目錄 /usr/share/nginx/html; index index.php index.html index.htm; server_name your_server_name; location / { try_files $uri $uri//index.html; } location ~ .php$ { try_files $uri =404; fastcgi_pass unix:unix:/run/php/php8.0-fpm.sock; fastcgi_index index.php; 包括 fastcgi_params; fastcgi_cache MYAPP; fastcgi_cache_valid 200 60m; } }

測試 FastCGI 緩存

在文檔根目錄中創建一個簡單的 PHP 文件。

$ vi /usr/share/nginx/html/info.php

粘貼以下內容並保存

現在使用請求文件 curl 命令或使用瀏覽器

如果緩存正常,那麼可以在/etc/nginx/cache下列出緩存目錄

測試nginx緩存

在 server{} 指令上方添加以下行以指示緩存是否丟失或命中

add_header X-Cache $upstream_cache_status;

重新啟動 Nginx 並運行 curl 命令為

$ curl -I https://localhost/info.php

緩存命中

在 Nginx fastCGI Cache 中設置緩存異常

有時我們可能不需要緩存動態內容,例如基本身份驗證頁面。 這些類型的內容可以根據“$request_method”“”$request_uri”“$http_cookie”等不同的變量避免被緩存。

下面是緩存異常的示例配置,應該在服務器內部使用{}

指示。

#默認緩存所有內容 set $no_cache 0; #不要緩存 POST 請求 if ($request_method = POST) { set $no_cache 1; } #如果 URL 包含查詢字符串則不緩存 if ($query_string != “”) { set $no_cache 1; } #不要緩存以下URL if ($request_uri ~* “/(cp/)”) { set $no_cache 1; } #如果有名為PHPSESSID的cookie則不緩存 if ($http_cookie = “PHPSESSID”) { set $no_cache 1; }

結論

在本文中,我們學習瞭如何使用 PHP 配置 Nginx 以進行動態內容緩存。 此外,我們還了解了設置緩存異常的不同技巧。