Ubuntu LNMP中如何使用缓存提高速度
Ubuntu LNMP环境中使用缓存提高速度的方法
在Ubuntu系统的LNMP(Linux+Nginx+MySQL+PHP)架构中,缓存是提升网站响应速度、降低服务器负载的核心手段。以下从Nginx代理缓存、PHP脚本缓存、MySQL数据库缓存三个关键层面,结合具体配置步骤与优化技巧展开说明:
一、Nginx缓存:减少后端请求与静态资源加载时间
Nginx作为反向代理服务器,可通过代理缓存(Proxy Cache)缓存后端(PHP-FPM)的响应结果,避免重复请求;同时通过静态资源缓存减少客户端对静态文件的重复下载。
1. 代理缓存配置(针对动态内容)
- 定义缓存路径与参数:在
/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
清除对应路径的缓存。
2. 静态资源缓存(浏览器端)
对于图片、CSS、JavaScript等静态文件,通过expires
指令设置浏览器缓存有效期,减少客户端对服务器的请求:
location ~* \.(jpg|jpeg|png|gif|css|js|ico)$ {
expires 30d;
# 缓存30天
add_header Cache-Control "public, no-transform";
}
二、PHP缓存:加速脚本执行
PHP脚本的编译与执行是动态网站的主要性能瓶颈,通过OPcache(PHP内置扩展)缓存脚本字节码,可避免每次请求都重新编译脚本。
1. 安装与启用OPcache
- 安装扩展:Ubuntu系统中,默认PHP包已包含OPcache,无需额外安装。若未启用,可通过以下命令安装:
sudo apt install php-opcache # 根据PHP版本调整(如php7.4-opcache、php8.1-opcache)
- 配置OPcache:编辑PHP-FPM配置文件(
/etc/php/7.x/fpm/php.ini
,7.x
为具体版本),启用OPcache并调整参数:[opcache] zend_extension=opcache.so # 启用扩展 opcache.enable=1 # 开启OPcache opcache.memory_consumption=128 # 缓存内存大小(MB,根据服务器内存调整) opcache.interned_strings_buffer=8 # 内部字符串缓冲区大小 opcache.max_accelerated_files=4000 # 最大加速文件数量(需覆盖项目文件总数) opcache.revalidate_freq=60 # 脚本文件检查更新频率(秒) opcache.fast_shutdown=1 # 快速关闭(提升性能)
- 重启PHP-FPM:配置生效后,重启PHP-FPM服务:
sudo systemctl restart php7.x-fpm
- 验证配置:创建
info.php
文件(< ?php phpinfo(); ?>
),访问该文件并搜索“opcache”,确认OPcache已开启。
三、MySQL缓存:优化数据库查询性能
MySQL的缓存机制可减少磁盘I/O与重复查询,提升数据库响应速度。
1. InnoDB缓冲池(核心优化项)
InnoDB存储引擎的缓冲池(innodb_buffer_pool
)用于缓存数据与索引页,减少磁盘读取。建议将其大小设置为服务器物理内存的60%-80%(如16GB内存可设置为10-12GB):
innodb_buffer_pool_size = 10G # 根据服务器内存调整
innodb_buffer_pool_instances = 8 # 缓冲池实例数(提升并发性能)
2. 查询缓存(MySQL 8.0前适用)
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 # 单个查询缓存最大大小
3. 替代方案:使用Redis/Memcached
对于高并发场景,建议使用Redis(内存数据库)替代MySQL查询缓存,缓存频繁访问的数据(如商品信息、用户会话)。需安装Redis并配置PHP扩展(php-redis
),在应用程序中实现缓存逻辑(如通过Redis::get()
获取缓存数据,Redis::set()
存储数据)。
四、其他优化技巧
- CDN加速:将静态资源(图片、CSS、JS)上传至CDN(内容分发网络),利用CDN的全球节点缓存资源,减少用户访问延迟。
- 浏览器缓存:通过Nginx的
expires
指令设置浏览器缓存,提升重复访问速度(如上述静态资源缓存配置)。 - 应用层缓存:在应用程序中实现自定义缓存(如使用APCu扩展缓存数组、对象),适用于需要快速访问的小数据。
通过以上缓存策略的组合应用,可显著提升Ubuntu LNMP架构的网站性能,降低服务器负载。配置完成后,建议通过nginx -t
测试配置语法,重启Nginx(sudo systemctl restart nginx
)与PHP-FPM(sudo systemctl restart php7.x-fpm
)使配置生效,并通过浏览器开发者工具(查看Network
面板)或curl -I
命令验证缓存是否命中。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu LNMP中如何使用缓存提高速度
本文地址: https://pptw.com/jishu/730517.html