在PHP的LNMP(Linux, Nginx, MySQL, PHP)環境中,實現HTTP緩存控制可以通過以下幾種方法:
Nginx提供了強大的緩存控制功能,可以在配置文件中通過add_header
指令來設置HTTP緩存頭。
server {
listen 80;
server_name example.com;
location / {
root /var/www/html;
index index.php index.html index.htm;
# 設置緩存控制頭
add_header Cache-Control "public, max-age=3600";
# 處理PHP文件
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
}
}
}
在這個示例中,Cache-Control
頭被設置為public, max-age=3600
,表示資源可以被公共緩存,并且緩存時間為1小時。
在PHP代碼中,可以使用header()
函數來設置HTTP緩存頭。
<?php
// 設置緩存控制頭
header('Cache-Control: public, max-age=3600');
header('Expires: ' . gmdate('D, d M Y H:i:s', time() + 3600) . ' GMT');
header('Pragma: public');
// 你的業務邏輯代碼
echo "Hello, World!";
?>
在這個示例中,header()
函數被用來設置Cache-Control
、Expires
和Pragma
頭,以實現HTTP緩存控制。
Nginx和PHP-FPM通常會將靜態文件和PHP輸出緩存到文件系統中。確保Nginx配置正確設置了緩存路徑,并且PHP-FPM有足夠的權限寫入這些路徑。
server {
listen 80;
server_name example.com;
location / {
root /var/www/html;
index index.php index.html index.htm;
# 設置緩存路徑
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 1d;
add_header Cache-Control "public";
}
# 處理PHP文件
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
}
}
}
在這個示例中,靜態文件(如圖片、CSS、JS文件)被設置為緩存1天,并且使用了expires
指令。
ETag和Last-Modified頭是實現HTTP緩存的重要機制。Nginx和PHP-FPM可以自動生成這些頭,從而減少不必要的數據傳輸。
server {
listen 80;
server_name example.com;
location / {
root /var/www/html;
index index.php index.html index.htm;
# 啟用ETag和Last-Modified頭
if ($request_method = GET) {
add_header ETag $request_time;
add_header Last-Modified $date_gmt;
}
# 處理PHP文件
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
}
}
}
在這個示例中,ETag
和Last-Modified
頭被啟用,Nginx會根據資源的修改時間和ETag頭來判斷是否需要重新傳輸資源。
通過以上方法,你可以在LNMP環境中實現HTTP緩存控制,從而提高網站的性能和用戶體驗。