Debian LNMP缓存策略配置指南
在Debian系统的LNMP(Linux+Nginx+MySQL+PHP)架构中,缓存是提升网站性能的关键手段。以下从Nginx代理缓存、PHP脚本缓存、MySQL数据库缓存、内存缓存(Redis/Memcached)及静态资源优化五个维度,详细说明缓存策略的配置方法。
Nginx的proxy_cache
模块可实现反向代理缓存,将后端PHP-FPM返回的动态内容缓存到本地,减少重复请求的处理压力。
http
块中添加以下配置,设置缓存存储路径、内存区域及大小限制。http {
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off;
# levels=1:2 定义缓存目录层级(如/var/cache/nginx/ab/cd/ef)
# keys_zone=my_cache:10m 分配10MB内存用于存储缓存键
# max_size=1g 缓存文件最大总大小(1GB)
# inactive=60m 缓存项60分钟未被访问则自动清除
# use_temp_path=off 避免临时文件写入,提升性能
}
server
或location
块中配置缓存行为,指定缓存区域及不同状态码的缓存时间。server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend; # 后端PHP-FPM地址(如unix:/var/run/php/php7.4-fpm.sock)
proxy_cache my_cache; # 启用名为my_cache的缓存区域
proxy_cache_valid 200 302 10m; # 200/302状态码缓存10分钟
proxy_cache_valid 404 1m; # 404状态码缓存1分钟
add_header X-Proxy-Cache $upstream_cache_status; # 添加响应头,显示缓存状态(HIT/MISS/BYPASS)
}
}
curl -I http://example.com
命令查看响应头,若出现X-Proxy-Cache: HIT
则表示缓存命中。OPcache是PHP官方推出的字节码缓存扩展,可缓存编译后的PHP脚本,避免每次请求都重新解析和编译,显著提升PHP执行速度。
sudo apt install php-opcache # 根据PHP版本调整(如php7.4-opcache)
/etc/php/7.4/fpm/php.ini
),添加或修改以下参数:[opcache]
zend_extension=opcache.so # 启用OPcache扩展
opcache.enable=1 # 开启OPcache
opcache.enable_cli=1 # 允许命令行模式下使用OPcache
opcache.memory_consumption=128 # 缓存内存大小(MB,根据服务器内存调整,建议128-256MB)
opcache.max_accelerated_files=4000 # 最大缓存文件数(根据项目文件数量调整)
opcache.revalidate_freq=60 # 每60秒检查一次文件是否更新(0表示每次都检查,生产环境建议>0)
opcache.fast_shutdown=1 # 快速释放内存
sudo systemctl restart php7.4-fpm # 根据PHP版本调整
info.php
文件(<?php phpinfo(); ?>
),访问该文件并搜索“OPcache”,即可查看缓存命中率等信息。MySQL的缓存机制可减少磁盘I/O,提升查询性能。主要包括InnoDB缓冲池(缓存数据和索引)和查询缓存(MySQL 8.0及以上已移除)。
/etc/mysql/mysql.conf.d/mysqld.cnf
),添加以下参数:[mysqld]
innodb_buffer_pool_size=1G # 缓冲池大小(建议为服务器内存的50%-70%,如16GB内存可设为8G-12G)
innodb_buffer_pool_instances=8 # 缓冲池实例数(提升并发性能,建议4-8个)
innodb_log_file_size=256M # 日志文件大小(建议256M-1G)
innodb_log_buffer_size=64M # 日志缓冲区大小
[mysqld]
query_cache_type=1 # 开启查询缓存(1=开启,0=关闭)
query_cache_size=64M # 查询缓存大小(建议64M-128M)
query_cache_limit=2M # 单个查询缓存最大大小
sudo systemctl restart mysql
SHOW STATUS LIKE 'Innodb_buffer_pool_read%';
,若Innodb_buffer_pool_reads
(从磁盘读取次数)远小于Innodb_buffer_pool_read_requests
(总读取请求次数),则说明缓冲池命中率高。对于频繁访问的动态数据(如用户会话、热点商品信息),可使用Redis(支持持久化)或Memcached(纯内存缓存)作为内存缓存,进一步提升数据访问速度。
sudo apt install redis-server php-redis # 安装Redis服务器及PHP扩展
/etc/redis/redis.conf
),根据需求调整参数(如maxmemory
限制内存使用、save
设置持久化规则),重启Redis服务:sudo systemctl restart redis-server
<?php
$redis = new Redis();
$redis->connect('127.0.0.1', 6379); // 连接Redis服务器
$key = 'hot_products';
if (!$data = $redis->get($key)) { // 若缓存不存在
$data = fetch_from_mysql(); // 从MySQL获取数据
$redis->set($key, $data, 3600); // 缓存1小时
}
echo $data;
?>
sudo apt install memcached php-memcached # 安装Memcached服务器及PHP扩展
sudo systemctl restart memcached
配置方式与Redis类似,通过Memcached
类连接和使用。静态资源(图片、CSS、JS、字体等)变化频率低,可通过Nginx的expires
指令设置长期缓存,减少客户端请求次数。
server
或location
块中添加以下配置:server {
listen 80;
server_name example.com;
location /static/ { # 静态资源目录
alias /var/www/static/; # 实际存储路径
expires 30d; # 缓存30天
add_header Cache-Control "public, no-transform"; # 允许公共缓存,禁止代理服务器转换内容
}
}
Cache-Control: public, max-age=2592000
(30天的秒数),则表示缓存生效。style.v1.css
)强制刷新缓存;动态数据可通过Redis::del()
或Memcached::delete()
手动删除缓存。nginx -T
查看Nginx缓存状态,redis-cli info stats
查看Redis缓存命中率,mysqladmin extended-status
查看InnoDB缓冲池状态,及时优化配置。通过以上缓存策略的组合配置,可显著提升Debian LNMP架构的网站性能,降低服务器负载。