在Ubuntu上配置Nginx緩存策略可以顯著提高網站性能。以下是一些基本的緩存配置步驟和策略:
安裝Nginx和相關模塊: 確保你已經安裝了Nginx以及必要的模塊。你可以使用以下命令來安裝Nginx:
sudo apt update
sudo apt install nginx
配置緩存目錄:
在Nginx配置文件中,你需要指定一個目錄來存儲緩存文件。通常,這個目錄位于 /var/cache/nginx
。你可以使用以下命令來創建這個目錄(如果它不存在的話):
sudo mkdir -p /var/cache/nginx
sudo chown -R www-data:www-data /var/cache/nginx
編輯Nginx配置文件:
打開Nginx的主配置文件,通常位于 /etc/nginx/nginx.conf
,或者你可以在 sites-available
目錄下的特定虛擬主機配置文件中進行設置。例如:
sudo nano /etc/nginx/sites-available/default
添加緩存配置:
在 server
塊中,你可以添加以下配置來啟用緩存:
http {
# 緩存路徑
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off;
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend;
proxy_cache my_cache;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
add_header X-Proxy-Cache $upstream_cache_status;
}
}
upstream backend {
server unix:/var/run/php/php7.4-fpm.sock; # 根據你的PHP版本調整
# 或者使用IP地址和端口
# server 127.0.0.1:9000;
}
}
在這個配置中:
proxy_cache_path
指令定義了緩存的存儲路徑、緩存層級、緩存區名稱、最大緩存大小、緩存文件的最大非活動時間和是否使用臨時路徑。proxy_cache
指令指定了使用的緩存區名稱。proxy_cache_valid
指令設置了不同HTTP狀態碼的緩存時間。add_header X-Proxy-Cache
指令添加了一個自定義頭部,用于顯示緩存狀態。測試配置并重啟Nginx: 在保存配置文件后,你可以使用以下命令來測試Nginx配置是否正確:
sudo nginx -t
如果配置測試通過,你可以重啟Nginx來應用更改:
sudo systemctl restart nginx
使用ETag和Last-Modified:
在 location
塊中添加以下配置:
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
etag on;
if_modified_since exact;
# 其他配置...
}
分類型設置緩存時間: 根據不同類型的文件設置不同的緩存時間:
location ~* \.(jpg|jpeg|png|gif|svg|ico)$ {
expires 365d;
add_header Cache-Control "public, immutable";
}
location ~* \.(css|js)$ {
expires 30d;
add_header Cache-Control "public";
}
location ~* \.(woff|woff2|ttf|eot)$ {
expires 180d;
add_header Cache-Control "public";
}
緩存驗證配置:
location /static/ {
proxy_cache static_cache;
proxy_cache_valid 200 302 12h;
proxy_cache_valid 404 1m;
proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
proxy_cache_lock on;
# 其他配置...
}
當靜態文件更新時,需要確保用戶能獲取最新版本:
style.a1b2c3.css
)。style.css?v=1.0.0
)。public
指令允許中間緩存(如CDN)存儲內容。immutable
:對于帶哈希的文件名,可以使用 immutable
告訴瀏覽器內容永遠不會改變。