Nginx 是一個開源的高性能 Web 服務器,可用於加速內容和應用程序的交付。 Nginx 增強了安全性,提高了可擴展性,還可以用作高可用性負載均衡器。它可以用作反向代理,Nginx 最重要的用途之一是內容緩存。最好的方法之一是使用 Nginx 作為您的內容緩存。本文介紹了 NginxFastCGI 內容緩存以提高您網站的性能。
在 Nginx 上啟用 FastCGI 緩存
本文假設你已經使用 PHP 在你的 Linux 機器上安裝了 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下2級
- 鍵盤 – 內存區名稱(本例使用MYAPP,可自行設置)
- 不活躍 – 指定在指定時間內未訪問的緩存數據從緩存中刪除的時間。在本例中,不活動時間設置為 60m,可以增加或減少。
- fastcgi_cache_key – 指定如何散列緩存文件名
factcgi_cache_key 中使用的變量
- $ 計劃 – 請求方案 HTTPS 或 HTTP
- $ request_method – 指定請求方法,例如 GET 和 POST
- $主機 – 與請求匹配的服務器名稱
- $ request_uri – 完整的請求 URI
緩存文件的位置可以在硬盤上的任何位置,但它應該小於系統的 RAM + 交換空間以避免“未分配內存”問題。
然後轉到 location 指令並將 PHP 請求傳遞給 php-fpm。 將以下行添加到“位置〜.php $ {}”
fastcgi_cache MYAPP;
fastcgi_cache_valid 200 1m;
其中 MYAPP 是內存區域名稱,fastcgi_cache_valid200 緩存所有 HTTP200 響應。
如果只定義時間,則緩存 200、301 和 302 響應。
通過運行以下命令測試 Nginx 虛擬主機配置:
$ nginx -t
然後重啟 Nginx 服務。
$ systemctl restart 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"; server { listen 80; root /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; include fastcgi_params; fastcgi_cache MYAPP; fastcgi_cache_valid 200 60m; } }
測試 FastCGI 緩存
在文檔根目錄中創建一個簡單的 PHP 文件。
$ vi /usr/share/nginx/html/info.php
粘貼並保存以下內容
<?php phpinfo(); ?>
然後使用請求文件 curl 命令或使用您的瀏覽器
如果緩存是健康的,緩存目錄會列在 /etc/nginx/cache 下。
在 server {} 指令上方添加以下行以指示緩存是否丟失或命中。
add_header X-Cache $upstream_cache_status;
重啟Nginx,運行curl命令如下
$ curl -I https://localhost/info.php
在 Nginxfast CGI 緩存中設置緩存異常
您可能不需要緩存動態內容,例如基本身份驗證頁面。這些類型的內容可以根據“$ request_method”、“$ request_uri”和“$ http_cookie”等各種變量進行緩存。
以下是需要在服務器內使用的緩存異常的示例配置 {}
我會告訴你。
#Cache everything by default set $no_cache 0; #Don't cache POST requests if ($request_method = POST) { set $no_cache 1; } #Don't cache if the URL contains a query string if ($query_string != "") { set $no_cache 1; } #Don't cache the following URLs if ($request_uri ~* "/(cp/)") { set $no_cache 1; } #Don't cache if there is a cookie called PHPSESSID if ($http_cookie = "PHPSESSID") { set $no_cache 1; }
結論是
在本文中,您學習瞭如何使用 PHP 配置 Nginx 以進行動態內容緩存。您還了解了設置緩存異常的各種技巧。