在LNMP(Linux+Nginx+MySQL+PHP)架构中,缓存加速是提升网站性能的关键手段,主要涵盖Nginx代理缓存、Nginx FastCGI缓存、PHP脚本缓存(OPcache/APCu)、MySQL查询缓存四大类。以下是具体配置步骤及注意事项:
Nginx代理缓存可将后端服务器(如PHP-FPM、Node.js)的响应结果缓存到本地,减少重复请求的后端压力。
sudo mkdir -p /var/cache/nginx
sudo chown -R www-data:www-data /var/cache/nginx # 根据实际Nginx运行用户调整
nginx.conf的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/a/b/c)
# keys_zone=my_cache:10m 定义缓存区域名称(my_cache)及共享内存大小(10MB)
# max_size=1g 缓存最大容量(1GB)
# inactive=60m 缓存文件60分钟未被访问则自动删除
}
location(如/或动态接口),添加以下配置:server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend; # 后端服务器地址(如Unix socket或IP:Port)
proxy_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/EXPIRED)
}
}
curl -I http://example.com查看响应头,若出现X-Proxy-Cache: HIT则表示缓存命中。FastCGI缓存直接缓存PHP脚本的执行结果,比代理缓存更精准(避免重复解析PHP)。
nginx.conf的http块中添加:http {
fastcgi_cache_path /var/cache/nginx levels=1:2 keys_zone=my_fcgi_cache:10m max_size=1g inactive=60m use_temp_path=off;
}
.php文件的location,添加以下配置:server {
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; # 根据PHP版本调整
fastcgi_cache my_fcgi_cache; # 使用FastCGI缓存区域
fastcgi_cache_key "$scheme$request_method$host$request_uri"; # 缓存键(包含请求方法、URI等)
fastcgi_cache_valid 200 302 10m; # 200/302状态码缓存10分钟
fastcgi_cache_valid 404 1m; # 404状态码缓存1分钟
add_header X-FastCGI-Cache $upstream_cache_status; # 添加FastCGI缓存状态头
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
fastcgi_no_cache指令:location ~* /(login|admin)/ {
fastcgi_no_cache 1;
fastcgi_cache_bypass 1;
}
X-FastCGI-Cache字段(HIT表示缓存命中)。PHP脚本缓存可避免重复编译脚本,显著提升PHP执行速度(尤其适合动态网站)。
sudo apt install php-opcache # Debian/Ubuntu
sudo yum install php-opcache # CentOS/RHEL
/etc/php/7.4/fpm/php.ini),添加以下内容:[opcache]
zend_extension=opcache.so # 启用OPcache扩展
opcache.enable=1 # 开启OPcache
opcache.memory_consumption=128 # 分配128MB内存用于缓存
opcache.interned_strings_buffer=8 # 内部字符串缓冲区大小(8MB)
opcache.max_accelerated_files=4000 # 最大缓存文件数(根据项目文件数量调整)
opcache.revalidate_freq=60 # 脚本文件每60秒检查一次更新(0表示每次都检查)
opcache.fast_shutdown=1 # 快速关闭(优化内存释放)
info.php文件(<?php phpinfo(); ?>),访问该页面并搜索“opcache”,即可查看缓存命中率、内存使用等状态。MySQL缓存可减少重复查询的磁盘IO,提升数据库响应速度。
my.cnf中添加:[mysqld]
query_cache_type=1 # 开启查询缓存(1=开启,0=关闭)
query_cache_size=64M # 查询缓存大小(64MB)
[mysqld]
innodb_buffer_pool_size=1G # 缓冲池大小(建议设置为物理内存的50%-70%)
innodb_buffer_pool_instances=8 # 缓冲池实例数(提升并发性能)
sudo systemctl restart mysql # 或mariadb
location /static/ {
alias /var/www/static/;
expires 30d; # 缓存30天
add_header Cache-Control "public, no-transform";
}
sudo find /var/cache/nginx -type f -mtime +7 -delete # 删除7天前的缓存文件
$upstream_cache_status或OPcache的opcache_get_status()函数,定期监控缓存命中率(建议保持在80%以上)。通过以上配置,可显著提升LNMP架构的网站性能,减少服务器负载。需根据实际业务场景(如动态/静态内容比例、访问量)调整缓存参数,达到最佳效果。