Ubuntu LNMP環境中使用緩存提高速度的方法
在Ubuntu系統的LNMP(Linux+Nginx+MySQL+PHP)架構中,緩存是提升網站響應速度、降低服務器負載的核心手段。以下從Nginx代理緩存、PHP腳本緩存、MySQL數據庫緩存三個關鍵層面,結合具體配置步驟與優化技巧展開說明:
Nginx作為反向代理服務器,可通過代理緩存(Proxy Cache)緩存后端(PHP-FPM)的響應結果,避免重復請求;同時通過靜態資源緩存減少客戶端對靜態文件的重復下載。
/etc/nginx/nginx.conf
的http
塊中添加以下配置,指定緩存存儲路徑(/var/cache/nginx
)、緩存區域名稱(my_cache
,大小10MB)、最大緩存容量(1GB)、緩存項未訪問60分鐘后清除等參數:proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off;
server
或location
塊中,通過proxy_cache
指令關聯緩存區域,proxy_cache_valid
設置不同響應狀態碼的有效期(如200/302狀態碼緩存10分鐘,404狀態碼緩存1分鐘),并通過add_header
添加X-Proxy-Cache
頭用于驗證緩存是否命中:server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend; # 關聯后端(如PHP-FPM)
proxy_cache my_cache;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
add_header X-Proxy-Cache $upstream_cache_status; # 顯示緩存狀態(HIT/MISS/BYPASS)
}
}
purge
location塊(需安裝ngx_cache_purge
模塊),通過訪問http://example.com/purge/path/to/file
清除對應路徑的緩存。對于圖片、CSS、JavaScript等靜態文件,通過expires
指令設置瀏覽器緩存有效期,減少客戶端對服務器的請求:
location ~* \.(jpg|jpeg|png|gif|css|js|ico)$ {
expires 30d; # 緩存30天
add_header Cache-Control "public, no-transform";
}
PHP腳本的編譯與執行是動態網站的主要性能瓶頸,通過OPcache(PHP內置擴展)緩存腳本字節碼,可避免每次請求都重新編譯腳本。
sudo apt install php-opcache # 根據PHP版本調整(如php7.4-opcache、php8.1-opcache)
/etc/php/7.x/fpm/php.ini
,7.x
為具體版本),啟用OPcache并調整參數:[opcache]
zend_extension=opcache.so # 啟用擴展
opcache.enable=1 # 開啟OPcache
opcache.memory_consumption=128 # 緩存內存大?。∕B,根據服務器內存調整)
opcache.interned_strings_buffer=8 # 內部字符串緩沖區大小
opcache.max_accelerated_files=4000 # 最大加速文件數量(需覆蓋項目文件總數)
opcache.revalidate_freq=60 # 腳本文件檢查更新頻率(秒)
opcache.fast_shutdown=1 # 快速關閉(提升性能)
sudo systemctl restart php7.x-fpm
info.php
文件(<?php phpinfo(); ?>
),訪問該文件并搜索“opcache”,確認OPcache已開啟。MySQL的緩存機制可減少磁盤I/O與重復查詢,提升數據庫響應速度。
InnoDB存儲引擎的緩沖池(innodb_buffer_pool
)用于緩存數據與索引頁,減少磁盤讀取。建議將其大小設置為服務器物理內存的60%-80%(如16GB內存可設置為10-12GB):
innodb_buffer_pool_size = 10G # 根據服務器內存調整
innodb_buffer_pool_instances = 8 # 緩沖池實例數(提升并發性能)
MySQL 5.7及以下版本的查詢緩存(query_cache
)可緩存SELECT查詢結果,但MySQL 8.0已移除該功能(因效率低、易引發鎖爭用)。若使用MySQL 5.7,可調整以下參數:
query_cache_type = 1 # 開啟查詢緩存(1=開啟,0=關閉)
query_cache_size = 64M # 緩存大?。ǜ鶕樵兞空{整)
query_cache_limit = 2M # 單個查詢緩存最大大小
對于高并發場景,建議使用Redis(內存數據庫)替代MySQL查詢緩存,緩存頻繁訪問的數據(如商品信息、用戶會話)。需安裝Redis并配置PHP擴展(php-redis
),在應用程序中實現緩存邏輯(如通過Redis::get()
獲取緩存數據,Redis::set()
存儲數據)。
expires
指令設置瀏覽器緩存,提升重復訪問速度(如上述靜態資源緩存配置)。通過以上緩存策略的組合應用,可顯著提升Ubuntu LNMP架構的網站性能,降低服務器負載。配置完成后,建議通過nginx -t
測試配置語法,重啟Nginx(sudo systemctl restart nginx
)與PHP-FPM(sudo systemctl restart php7.x-fpm
)使配置生效,并通過瀏覽器開發者工具(查看Network
面板)或curl -I
命令驗證緩存是否命中。