如何在LNMP中配置缓存加速
导读:LNMP架构缓存加速配置指南 在LNMP(Linux+Nginx+MySQL+PHP)架构中,缓存加速是提升网站性能的关键手段,主要涵盖Nginx代理缓存、Nginx FastCGI缓存、PHP脚本缓存(OPcache/APCu)、MySQ...
LNMP架构缓存加速配置指南
在LNMP(Linux+Nginx+MySQL+PHP)架构中,缓存加速是提升网站性能的关键手段,主要涵盖Nginx代理缓存、Nginx FastCGI缓存、PHP脚本缓存(OPcache/APCu)、MySQL查询缓存四大类。以下是具体配置步骤及注意事项:
一、Nginx代理缓存配置(适用于反向代理场景)
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分钟未被访问则自动删除 } - 在Server块中启用缓存
针对需要缓存的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则表示缓存命中。
二、Nginx FastCGI缓存配置(针对PHP动态请求)
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块中启用缓存
针对.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; } - 验证缓存
访问PHP页面,检查响应头中的X-FastCGI-Cache字段(HIT表示缓存命中)。
三、PHP脚本缓存(OPcache/APCu)
PHP脚本缓存可避免重复编译脚本,显著提升PHP执行速度(尤其适合动态网站)。
- 安装OPcache扩展
大多数Linux发行版默认包含OPcache,若未安装可通过包管理器安装:sudo apt install php-opcache # Debian/Ubuntu sudo yum install php-opcache # CentOS/RHEL - 配置OPcache
编辑PHP-FPM配置文件(如/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 # 快速关闭(优化内存释放) - 验证OPcache状态
创建info.php文件(< ?php phpinfo(); ?>),访问该页面并搜索“opcache”,即可查看缓存命中率、内存使用等状态。
四、MySQL缓存配置(可选,针对数据库查询)
MySQL缓存可减少重复查询的磁盘IO,提升数据库响应速度。
- 启用查询缓存(MySQL 5.7及以上版本已移除)
若使用MySQL 5.6及以下版本,可在my.cnf中添加:[mysqld] query_cache_type=1 # 开启查询缓存(1=开启,0=关闭) query_cache_size=64M # 查询缓存大小(64MB) - 调整InnoDB缓冲池
InnoDB缓冲池用于缓存表数据和索引,是MySQL性能优化的关键参数:[mysqld] innodb_buffer_pool_size=1G # 缓冲池大小(建议设置为物理内存的50%-70%) innodb_buffer_pool_instances=8 # 缓冲池实例数(提升并发性能) - 重启MySQL服务
sudo systemctl restart mysql # 或mariadb
五、缓存优化建议
- 静态文件单独缓存
对图片、CSS、JS等静态文件,可在Nginx中配置更长缓存时间:location /static/ { alias /var/www/static/; expires 30d; # 缓存30天 add_header Cache-Control "public, no-transform"; } - 定期清理缓存
对于Nginx缓存,可设置定时任务(如每天凌晨)清理旧缓存:sudo find /var/cache/nginx -type f -mtime +7 -delete # 删除7天前的缓存文件 - 监控缓存命中率
通过Nginx的$upstream_cache_status或OPcache的opcache_get_status()函数,定期监控缓存命中率(建议保持在80%以上)。
通过以上配置,可显著提升LNMP架构的网站性能,减少服务器负载。需根据实际业务场景(如动态/静态内容比例、访问量)调整缓存参数,达到最佳效果。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 如何在LNMP中配置缓存加速
本文地址: https://pptw.com/jishu/735111.html
