在现代 Web 架构中,Nginx缓存不仅可以加速网站响应速度,还能有效减轻后端服务器的压力。然而,当缓存服务器或后端服务出现故障时,如何确保用户仍能正常访问?这就引出了我们今天要讲解的主题——故障转移。
本教程将手把手教你如何配置 Nginx 实现缓存与故障转移机制,即使你是个运维小白,也能轻松上手!
什么是 Nginx 缓存与故障转移?
Nginx缓存是指 Nginx 将后端服务器返回的内容临时存储在本地磁盘或内存中,当下次相同请求到来时,直接从缓存返回,无需再次访问后端。
故障转移(Failover)则是在主服务器不可用时,自动切换到备用服务器,保证服务不中断。结合两者,我们可以构建一个既高效又稳定的高可用架构。
准备工作
- 一台安装了 Nginx 的服务器(建议版本 ≥ 1.16)
- 至少两台后端应用服务器(例如运行 PHP、Node.js 或 Python 的服务)
- 基本的 Linux 命令行操作能力
步骤一:配置 Nginx 缓存
首先,在 Nginx 配置文件中(通常位于 /etc/nginx/nginx.conf 或 /etc/nginx/conf.d/default.conf)定义缓存路径:
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off; 解释:
keys_zone=my_cache:10m:定义缓存区名为my_cache,占用 10MB 内存用于索引max_size=1g:缓存最大为 1GBinactive=60m:60 分钟内未被访问的缓存将被删除
步骤二:配置反向代理与缓存使用
在 server 块中配置反向代理,并启用缓存:
upstream backend { server 192.168.1.10:8080; # 主服务器 server 192.168.1.11:8080 backup; # 备用服务器(故障时启用)}server { listen 80; server_name example.com; location / { proxy_cache my_cache; proxy_cache_valid 200 302 10m; proxy_cache_valid 404 1m; proxy_pass http://backend; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; # 当缓存未命中或后端错误时,允许重试 proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504; }} 关键点说明:
backup标记的服务器仅在主服务器不可用时才被使用,这是实现故障转移的核心proxy_next_upstream指令定义了在哪些错误情况下尝试下一个 upstream 服务器- 缓存只对成功响应(如 200、302)生效,避免缓存错误页面
步骤三:测试故障转移
1. 启动 Nginx:sudo nginx -t && sudo systemctl reload nginx
2. 访问你的网站,确认内容正常加载并被缓存
3. 手动关闭主后端服务器(192.168.1.10)
4. 再次访问网站——如果配置正确,Nginx 会自动将请求转发到备用服务器(192.168.1.11),用户无感知!
优化建议
- 为缓存目录设置合适的权限:
sudo chown -R www-data:www-data /var/cache/nginx - 监控缓存命中率:可在日志中添加
$upstream_cache_status变量 - 结合 Keepalived 或 DNS 负载均衡,实现多层高可用架构
总结
通过合理配置 Nginx 的缓存与 upstream 机制,我们不仅提升了网站性能,还实现了自动化的故障转移。这种方案成本低、效果好,非常适合中小企业或个人项目使用。
记住,Nginx缓存 + 反向代理 + backup 服务器 = 稳定高效的 Web 服务!
关键词回顾:Nginx缓存、故障转移、高可用架构、反向代理

