LNMP中Nginx缓存配置技巧
导读:LNMP中Nginx缓存配置技巧 1. 选择合适的缓存类型 Nginx在LNMP架构中主要支持两种缓存:代理缓存(proxy_cache)(缓存后端服务器响应,如PHP-FPM、Node.js等)和FastCGI缓存(fastcgi_cac...
LNMP中Nginx缓存配置技巧
1. 选择合适的缓存类型
Nginx在LNMP架构中主要支持两种缓存:代理缓存(proxy_cache)(缓存后端服务器响应,如PHP-FPM、Node.js等)和FastCGI缓存(fastcgi_cache)(专为PHP应用设计,直接缓存PHP脚本输出)。根据场景选择:
- 若后端是PHP应用,优先用
fastcgi_cache
(减少PHP-FPM解析开销); - 若后端是其他服务(如API、数据库),用
proxy_cache
(通用代理缓存)。
2. 基础配置参数详解
无论选择哪种缓存,核心参数需合理设置:
- 缓存路径与存储:通过
proxy_cache_path
(或fastcgi_cache_path
)定义,关键参数包括:keys_zone=my_cache:10m
:缓存区域名称(my_cache
)及共享内存大小(10MB,用于存储缓存键和元数据);max_size=1g
:缓存最大磁盘空间(1GB),超过后自动清理旧缓存;inactive=60m
:缓存项未被访问60分钟后删除(即使未过期);levels=1:2
:缓存目录层级(如/var/cache/nginx/ab/cd/
),避免单目录文件过多影响性能;use_temp_path=off
:禁用临时路径,直接写入缓存目录,提升IO效率。
- 缓存键定义:通过
proxy_cache_key
(或fastcgi_cache_key
)唯一标识缓存项,推荐包含协议、域名、URI:
若需排除查询参数(如proxy_cache_key "$scheme$proxy_host$request_uri";
?utm_source=xxx
),可简化为"$scheme$proxy_host$request_uri?
,避免重复缓存。
3. 缓存有效期与状态控制
- 状态码对应缓存时间:用
proxy_cache_valid
(或fastcgi_cache_valid
)设置不同状态码的缓存时长,例如:proxy_cache_valid 200 302 10m; # 200/302状态码缓存10分钟 proxy_cache_valid 404 1m; # 404状态码缓存1分钟(避免长期缓存错误页面) proxy_cache_valid any 5m; # 其他状态码缓存5分钟(可选)
- 缓存状态反馈:添加
add_header
指令,通过响应头查看缓存命中情况:
访问网站时通过add_header X-Proxy-Cache $upstream_cache_status; # 值为HIT(命中)、MISS(未命中)、BYPASS(绕过)
curl -I http://example.com
查看头部,确认缓存是否生效。
4. 高级缓存控制技巧
- 绕过缓存条件:用
proxy_cache_bypass
(或fastcgi_cache_bypass
)指定何时不缓存,例如:proxy_cache_bypass $http_pragma $http_authorization; # 当请求包含Pragma:no-cache或Authorization头时绕过缓存 proxy_no_cache $http_pragma $http_authorization; # 同时不缓存这些请求的响应
- 缓存重新验证:开启
proxy_cache_revalidate on;
,当缓存过期时向后台发送If-Modified-Since
请求,减少数据传输(若后台返回304,则继续使用缓存)。
5. 静态文件缓存优化
对于图片、CSS、JS等静态文件,可直接在location
块中配置缓存,无需经过后端:
location ~* \.(jpg|jpeg|png|gif|css|js|ico)$ {
expires 30d;
# 设置浏览器缓存30天
add_header Cache-Control "public, no-transform";
# 允许公共缓存,禁止转换内容(如图片压缩)
access_log off;
# 关闭访问日志(减少IO)
add_header X-Static-Cache $upstream_cache_status;
# 可选:记录静态缓存状态
}
此配置可显著降低Nginx与后端的通信压力。
6. 缓存与PHP-FPM协同(FastCGI缓存)
若使用PHP应用,需结合fastcgi_cache
与OPcache(PHP字节码缓存):
- Nginx FastCGI缓存配置:
http { fastcgi_cache_path /var/cache/nginx levels=1:2 keys_zone=php_cache:10m max_size=1g inactive=60m use_temp_path=off; server { location ~ \.php$ { fastcgi_pass unix:/var/run/php/php8.2-fpm.sock; fastcgi_cache php_cache; fastcgi_cache_valid 200 302 10m; fastcgi_cache_key "$scheme$request_method$host$request_uri"; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } } }
- PHP OPcache配置(
php.ini
):
两者结合可减少PHP脚本解析时间(OPcache)和后端响应时间(FastCGI缓存),提升整体性能。[opcache] zend_extension=opcache.so opcache.enable=1 opcache.memory_consumption=128 opcache.interned_strings_buffer=8 opcache.max_accelerated_files=4000 opcache.revalidate_freq=60
7. 缓存预热与失效策略
- 缓存预热:网站上线前,通过脚本或工具(如
curl
)提前访问热门页面,将内容加载到缓存中,避免用户首次访问时延迟。 - 缓存失效:当内容更新时,需清除旧缓存。可通过以下方式实现:
- 时间戳控制:在URL中添加版本号(如
script.js?v=2
),强制Nginx重新缓存; - 手动清理:删除缓存目录中的文件(
rm -rf /var/cache/nginx/*
),或通过Nginx的proxy_cache_purge
模块(需额外安装)实现精准清理。
- 时间戳控制:在URL中添加版本号(如
8. 监控与调优
- 日志分析:通过
access_log
记录缓存命中率,计算公式为:HIT次数 / (HIT次数 + MISS次数)
。例如:log_format cache_log '$remote_addr - $upstream_cache_status [$time_local] "$request"'; access_log /var/log/nginx/cache.log cache_log;
- 参数调优:根据服务器性能调整
keys_zone
大小(建议为max_size
的1/10~1/5)、inactive
时间(避免频繁清理)和max_size
(预留足够空间防止磁盘写满)。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: LNMP中Nginx缓存配置技巧
本文地址: https://pptw.com/jishu/729741.html