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 # 缓存内存大小(MB,根据服务器内存调整) 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命令验证缓存是否命中。