centos lamp缓存策略优化
导读:CentOS LAMP缓存策略优化 一 分层缓存总体策略 建议采用自上而下的多层缓存体系: 浏览器缓存:通过 mod_expires 设置资源 Cache-Control/Expires,对静态资源设置较长有效期,对HTML按业务可适度...
CentOS LAMP缓存策略优化
一 分层缓存总体策略
- 建议采用自上而下的多层缓存体系:
- 浏览器缓存:通过 mod_expires 设置资源 Cache-Control/Expires,对静态资源设置较长有效期,对HTML按业务可适度缓存。
- 页面/反向代理缓存:在 Apache 前部署 Varnish 或 Nginx 作为反向代理,缓存可公开缓存的页面与接口响应。
- 应用层数据缓存:使用 APCu(本地用户态缓存)与 Memcached/Redis(分布式对象/会话/页面片段缓存)。
- PHP字节码缓存:启用 OPcache,避免重复解析编译。
- 数据库缓存:优先调大 InnoDB Buffer Pool,在新版本中避免依赖查询缓存(多数版本已弃用/移除)。
- 连接与I/O优化:启用 mod_deflate(GZIP) 压缩;静态资源使用 noatime 挂载;必要时使用 CDN 承接热点静态资源。
以上策略在 CentOS 的 LAMP 环境中均可通过常用模块与组件落地,组合使用能显著降低后端负载与响应时延。
二 Apache HTTP Server 缓存配置
- 启用模块与压缩:安装并启用 mod_cache、mod_cache_disk、mod_expires、mod_deflate,对文本类资源开启压缩,减少传输体积。
- 浏览器缓存示例(/etc/httpd/conf.d/expires.conf):
< IfModule mod_expires.c> ExpiresActive On ExpiresByType text/html "access plus 1 hour" ExpiresByType text/css "access plus 1 week" ExpiresByType application/javascript "access plus 1 week" ExpiresByType image/png "access plus 1 month" ExpiresByType image/jpg "access plus 1 month" < /IfModule> < IfModule mod_deflate.c> AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/javascript application/json < /IfModule> - 页面/反向代理缓存示例(/etc/httpd/conf.d/cache.conf,使用磁盘缓存):
< IfModule mod_cache.c> < IfModule mod_cache_disk.c> CacheRoot "/var/cache/httpd/mod_cache_disk" CacheEnable disk / CacheDirLevels 2 CacheDirLength 1 < /IfModule> < /IfModule> - 高并发建议:将 Apache 切换为 mpm_event 并与 PHP-FPM 配合(通过 mod_proxy_fcgi),事件驱动更省连接与内存,适合与 Varnish/Nginx 前置配合。
三 PHP 层缓存配置
- OPcache(php.ini 或 /etc/php.d/10-opcache.ini):
说明:开发环境可开启 validate_timestamps 便于热更新;生产环境可按需调整为定时校验以降低开销。[opcache] zend_extension=opcache.so opcache.enable=1 opcache.memory_consumption=128 opcache.interned_strings_buffer=8 opcache.max_accelerated_files=10000 opcache.validate_timestamps=1 opcache.revalidate_freq=60 opcache.enable_cli=0 - APCu(本地用户缓存,适合键值/片段/配置):
[apcu] extension=apcu.so apcu.enable_cli=0 apcu.shm_size=32M apcu.ttl=7200 apcu.user_ttl=7200 apcu.gc_ttl=3600 - 分布式对象/会话缓存(Memcached 示例):
如需更高可用与丰富数据结构,可改用 Redis(php-pecl-redis)。; 安装:yum install php-pecl-memcached [memcached] extension=memcached.so memcached.sess_consistency=0 memcached.sess_lock_wait=1500 memcached.sess_lock_peers=1 memcached.sess_lock_peers_timeout=5000 memcached.sess_prefix=phpsess_
四 MariaDB/MySQL 层缓存配置
- InnoDB 缓冲池(/etc/my.cnf 或 /etc/mysql/my.cnf):
建议将 innodb_buffer_pool_size 设为可用内存的较大比例(如 50%–70%,视业务与内存总量而定),以缓存热点数据与索引。[mysqld] innodb_buffer_pool_size=1G innodb_buffer_pool_instances=8 innodb_log_file_size=256M innodb_log_buffer_size=16M - 查询缓存:在 MySQL 5.7 中已不推荐使用,在 MariaDB 10.1+ 多版本中默认禁用或移除,建议通过应用层缓存与索引优化替代。
- 其他:结合业务调整 max_connections、连接池与慢查询日志,减少慢查询对缓存命中率与并发的影响。
五 Varnish 与系统层优化要点
- Varnish 反向代理缓存(/etc/varnish/default.vcl 简化示例):
说明:对可缓存内容设置 beresp.ttl;对带 Set-Cookie 或用户私有内容跳过缓存;按需实现 PURGE 接口与 HTTPS 透传。backend default { .host = "127.0.0.1"; .port = "8080"; } sub vcl_recv { if (req.method == "PURGE") { return(synth(200, "Purged")); } if (req.http.X-Forwarded-Proto == "https") { set req.http.X-Forwarded-Proto = "https"; } return(hash); } sub vcl_backend_response { if (beresp.http.Content-Type ~ "^(text|application)/") { unset beresp.http.Set-Cookie; set beresp.ttl = 1h; } return(deliver); } - 系统层与文件系统:
- 减少交换倾向:vm.swappiness=10;脏页刷写:vm.dirty_background_ratio=5、vm.dirty_ratio=10。
- 挂载选项:为静态资源所在分区使用 noatime,降低元数据写入。
- 网络(/etc/sysctl.conf 示例):
执行 sysctl -p 使配置生效。net.ipv4.tcp_tw_reuse=1 net.ipv4.tcp_fin_timeout=30 net.ipv4.tcp_keepalive_time=1200 net.ipv4.ip_local_port_range="1024 65535" net.core.somaxconn=1024 net.core.netdev_max_backlog=2000
- 上线前务必:语法检查 apachectl configtest、灰度/压测与监控基线对比,确保缓存策略与业务一致性(如登录态、购物车、A/B 实验等不应被错误缓存)。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: centos lamp缓存策略优化
本文地址: https://pptw.com/jishu/752253.html
