温馨提示×

Ubuntu LNMP中如何使用缓存提高速度

小樊
39
2025-10-20 12:26:35
栏目: 智能运维

Ubuntu LNMP环境中使用缓存提高速度的方法
在Ubuntu系统的LNMP(Linux+Nginx+MySQL+PHP)架构中,缓存是提升网站响应速度、降低服务器负载的核心手段。以下从Nginx代理缓存、PHP脚本缓存、MySQL数据库缓存三个关键层面,结合具体配置步骤与优化技巧展开说明:

一、Nginx缓存:减少后端请求与静态资源加载时间

Nginx作为反向代理服务器,可通过代理缓存(Proxy Cache)缓存后端(PHP-FPM)的响应结果,避免重复请求;同时通过静态资源缓存减少客户端对静态文件的重复下载。

1. 代理缓存配置(针对动态内容)

  • 定义缓存路径与参数:在/etc/nginx/nginx.confhttp块中添加以下配置,指定缓存存储路径(/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; 
  • 启用代理缓存:在serverlocation块中,通过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.ini7.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命令验证缓存是否命中。

0