在 linux 中,nginx 无法像应用层那样通过单一命令直接刷新内存中的缓存有效期(ttl),因为 nginx 的 `proxy_cache_valid` 等配置属于静态编译或加载时的配置项。要实现不重启服务的情况下让新的缓存规则生效,必须使用 nginx -s reload 发送 sighup 信号。该操作会重新加载配置文件并平滑重启工作进程,旧连接保持处理完毕,新请求立即应用新规则。

Nginx 重载配置的具体执行步骤是什么
执行 nginx -s reload 是刷新缓存策略的标准做法。该命令向主进程发送信号,主进程验证配置语法后,启动新的工作进程并优雅地关闭旧的工作进程。由于缓存数据存储在磁盘上而非仅存在于内存中,重载配置不会清除已缓存的文件,但会改变后续请求对缓存有效期的判断逻辑。

sudo nginx -t sudo nginx -s reload
首先运行 nginx -t 检查配置文件语法是否正确,避免重载失败导致服务中断。确认无误后,执行 nginx -s reload。如果 Nginx 是通过 systemd 管理的,也可以使用 systemctl reload nginx,其效果与直接调用二进制文件相同。重载后,Nginx 会根据新的 proxy_cache_valid 或 expires 指令重新计算缓存头,从而改变缓存的有效期。
如何区分 proxy_cache_valid 和 expires 的重载影响
proxy_cache_valid 用于控制后端响应在 Nginx 缓存目录中保留的时间,而 expires 用于控制客户端浏览器缓存的时间。两者都需要通过 nginx -s reload 来生效,但作用对象不同。proxy_cache_valid 的改变会影响 Nginx 作为反向代理时向后端发起请求的频率,而 expires 的改变主要影响终端用户的体验。

# 示例:修改 proxy_cache_valid 为 10 分钟
location /api/ {
proxy_cache my_cache;
proxy_cache_valid 200 10m;
proxy_pass http://backend;
}
假设原配置中 proxy_cache_valid 200 5m;,现需改为 10 分钟。编辑配置文件将值更新为 10m,保存后执行 nginx -s reload。重载后,所有新的 200 状态码响应将被缓存 10 分钟。之前已缓存且未满 5 分钟的旧数据,其剩余有效期不变,直到它们自然过期或被新请求覆盖。这种机制确保了缓存策略的平滑过渡,无需手动删除缓存文件。
重载后缓存文件是否会被立即清除
执行 nginx -s reload 不会清除磁盘上的缓存文件。Nginx 的缓存是基于文件的,重载配置仅改变内存中的配置结构和时间判断逻辑。已存在的缓存文件会继续保留,直到它们的元数据指示它们已过期,或者被新的缓存条目替换。如果需要强制清空缓存,必须手动删除缓存目录或使用 proxy_cache_purge 模块(如果已启用)。


















