LNMP在Ubuntu上的缓存策略
导读:Ubuntu LNMP缓存策略与落地配置 一、分层缓存总体策略 建议采用自上而下的多层缓存:浏览器缓存 → Nginx 静态资源缓存/反向代理缓存 → PHP-FPM 的 FastCGI 缓存 → OPcache/APCu(字节码与用户态...
Ubuntu LNMP缓存策略与落地配置
一、分层缓存总体策略
- 建议采用自上而下的多层缓存:浏览器缓存 → Nginx 静态资源缓存/反向代理缓存 → PHP-FPM 的 FastCGI 缓存 → OPcache/APCu(字节码与用户态数据)→ Memcached(对象缓存)→ MySQL InnoDB 缓冲池(数据页缓存)。
- 静态资源(如图片、CSS、JS)设置长期 Cache-Control/Expires,并通过 ETag/Last-Modified 支持协商缓存;动态内容按路径/参数/身份区分可缓存性,必要时使用 Vary 与 Cache-Control: private。
- 对可缓存的动态页面启用 FastCGI 缓存,对不可缓存或强个性化页面回退到 PHP 执行;在响应头加入 X-Proxy-Cache/X-Cache-Status 便于观测命中率。
- 对象缓存(如页面片段、查询结果、会话)使用 Memcached;数据库层优先保障 InnoDB Buffer Pool 命中率。
- 注意版本差异:如 PHP 7.4 的 OPcache 默认启用,而 PHP 8.x 通常已内置并默认开启,但仍建议显式配置关键参数。
二、Nginx缓存配置要点
- 静态资源长期缓存(示例):
- 在 server 或 http 块中针对静态后缀设置:
- location ~* .(jpg|jpeg|png|gif|ico|css|js)$ {
- expires 30d;
- add_header Cache-Control “public, no-transform”;
- }
- location ~* .(jpg|jpeg|png|gif|ico|css|js)$ {
- 在 server 或 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;
- }
- server {
- location / {
- proxy_pass http://backend;
- proxy_cache my_cache;
- proxy_cache_valid 200 302 10m;
- proxy_cache_valid 404 1m;
- add_header X-Proxy-Cache $upstream_cache_status;
- }
- location / {
- }
- http {
- FastCGI 缓存(示例,用于 PHP 动态页):
- http {
- fastcgi_cache_path /var/cache/nginx levels=1:2 keys_zone=php_cache:10m max_size=1g inactive=60m use_temp_path=off;
- }
- location ~ .php$ {
- fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
- fastcgi_cache php_cache;
- fastcgi_cache_valid 200 302 10m;
- fastcgi_cache_valid 404 1m;
- include fastcgi_params;
- fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
- }
- http {
- 目录与权限:确保 /var/cache/nginx 存在且 www-data 可写;变更后执行 sudo systemctl reload nginx。
三、PHP与对象缓存配置要点
- OPcache(推荐值,编辑 FPM 的 php.ini,如 /etc/php/7.4/fpm/php.ini):
- [opcache]
- opcache.enable=1
- opcache.memory_consumption=128
- opcache.interned_strings_buffer=8
- opcache.max_accelerated_files=4000
- opcache.revalidate_freq=60
- [opcache]
- APCu(用户态数据缓存,适合页面片段/配置/计算结果):
- sudo apt-get install php-apcu
- [apcu]
- extension=apcu.so
- apcu.enable_cli=1
- apcu.shm_size=32M
- Memcached(对象缓存,示例):
- sudo apt-get install memcached php-memcached
- 启动服务:sudo systemctl start memcached
- PHP 示例:
- $mem = new Memcached(); $mem-> addServer(‘127.0.0.1’, 11211);
- $mem-> set(‘k’,‘v’, 3600); // 缓存 1 小时
- 注意:OPcache 默认启用于 PHP 7.4,而 PHP 8.x 通常已内置并默认开启,生产环境仍建议显式配置关键参数。
四、MySQL缓存配置要点
- InnoDB 缓冲池(数据页缓存,强烈建议优先保障):
- [mysqld]
- innodb_buffer_pool_size=1G
- innodb_buffer_pool_instances=8
- [mysqld]
- 查询缓存(如仍使用 MySQL 5.7 且业务可接受):
- [mysqld]
- query_cache_type=1
- query_cache_size=64M
- query_cache_limit=2M
- [mysqld]
- 提示:在 MySQL 8.0 中查询缓存已被移除,应重点优化 InnoDB Buffer Pool、合理设计索引与 SQL。
五、验证与运维建议
- 验证与观测:
- 在响应头查看 X-Proxy-Cache/X-Cache-Status,常见值为 HIT/MISS/EXPIRED/UPDATING/STALE;命中率提升通常体现在 TTFB 明显下降。
- 静态资源确认 Cache-Control/Expires 与 ETag/Last-Modified 生效;动态页在命中时返回 HIT。
- 运维要点:
- 变更配置后使用 sudo systemctl reload nginx 与 sudo systemctl restart php7.4-fpm 平滑生效。
- 定期清理或重建缓存目录(如 /var/cache/nginx)以释放空间;监控缓存命中率、慢查询与连接数。
- 对强个性化或含敏感信息的页面禁用或缩短缓存;必要时使用 Vary 与 Cache-Control: private 控制客户端与中间层缓存行为。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: LNMP在Ubuntu上的缓存策略
本文地址: https://pptw.com/jishu/755044.html
