当前位置: 首页 > java >正文

Nginx 负载均衡和缓存配置

Nginx 负载均衡配置

1. 基础配置

在 Nginx 中,负载均衡主要通过 upstream 模块实现,结合反向代理将请求分发到多个后端服务器。以下是一个基础配置示例:

http {upstream backend_servers {server 192.168.1.10:8080;server 192.168.1.11:8080;server 192.168.1.12:8080;}server {listen 80;server_name example.com;location / {proxy_pass http://backend_servers;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}}
}
  • upstream backend_servers:定义了一个后端服务器组,名称为 backend_servers

  • server:指定后端服务器的 IP 地址和端口。

  • proxy_pass:将请求转发到 upstream 定义的服务器组。

  • proxy_set_header:设置 HTTP 头,以便后端服务器可以获取请求的相关信息。

2. 负载均衡策略

Nginx 支持多种负载均衡策略:

  • 轮询(默认):依次将请求分发到每个后端服务器。

    upstream backend {server 192.168.1.101;server 192.168.1.102;server 192.168.1.103;
    }
  • 加权轮询:为每个服务器分配不同的权重,权重越高,分配到的请求越多。

    upstream backend {server 192.168.1.101 weight=3;server 192.168.1.102 weight=2;server 192.168.1.103 weight=1;
    }
  • IP 哈希:根据客户端的 IP 地址将请求分发到固定的后端服务器,适用于需要会话保持的场景。

    upstream backend {ip_hash;server 192.168.1.101;server 192.168.1.102;server 192.168.1.103;
    }
  • 最少连接:将请求分发到当前连接数最少的服务器,适用于处理时间较长的请求。

    upstream backend {least_conn;server 192.168.1.101;server 192.168.1.102;server 192.168.1.103;
    }
3. 高级配置
  • 健康检查:可以配置健康检查,自动移除不健康的服务器。

    upstream backend {server 192.168.1.10:8080;server 192.168.1.11:8080;server 192.168.1.12:8080;health_check interval=10s fails=3 passes=2 uri=/health port=8080;
    }
  • 备用服务器:可以指定备用服务器,当主服务器不可用时自动切换。

    upstream backend {server 192.168.1.10:8080;server 192.168.1.11:8080 backup;
    }

Nginx 缓存配置

1. 代理缓存

代理缓存是 Nginx 缓存后端服务器响应的一种方式,适用于动态内容的缓存。

http {proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=my_cache:10m max_size=10g;server {location /dynamic/ {proxy_pass http://backend;proxy_cache my_cache;proxy_cache_valid 200 302 10m;proxy_cache_valid 404 1m;proxy_cache_use_stale error timeout http_500 http_502 http_503;}}
}
  • proxy_cache_path:定义缓存的存储路径、层级结构、缓存区域名称、最大缓存大小等。

  • proxy_cache:指定使用哪个缓存区域。

  • proxy_cache_valid:设置不同响应状态码的缓存有效期。

  • proxy_cache_use_stale:在某些情况下使用过期的缓存,如后端服务器错误或超时。

2. 静态资源缓存

对于静态资源,可以直接设置浏览器缓存时间,减轻服务器压力。

location ~* \.(jpg|png|gif)$ {root /var/www/images;expires 30d;
}
  • expires:设置浏览器缓存时间,单位可以是秒、分钟、小时、天等。

3. 高级缓存配置
  • Vary 响应头:根据请求的某些头部字段来缓存不同版本的资源

    proxy_cache_valid 200 302 10m;
    proxy_cache Vary;
  • 连接和响应缓冲:优化连接和响应的缓冲设置

    proxy_buffers 8 4k;
    proxy_buffer_size 8k;
    proxy_busy_buffers_size 16k;
  • SSL 缓存:如果使用 SSL,配置 SSL 会话缓存。

    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 5m;

缓存最佳实践

  1. 合理设置缓存时间:根据资源更新频率设置合适的缓存时间。

  2. 监控缓存命中率:定期检查缓存命中率,评估缓存策略的有效性。

  3. 使用 CDN:利用 CDN 缓存静态资源,减轻服务器压力。

  4. 缓存预热:部署新版本时,预先加载缓存,避免缓存穿透。

  5. 安全性:确保缓存内容的安全性,避免敏感信息泄露。

通过合理配置 Nginx 的负载均衡和缓存功能,可以显著提升 Web 应用的性能和可靠性。

http://www.xdnf.cn/news/18283.html

相关文章:

  • 【软考架构】净室软件工程
  • Gin自定义Error中间件
  • SQL-leetcode— 2356. 每位教师所教授的科目种类的数量
  • 手机 浏览器调用摄像头扫描二维码Quagga
  • 2026 济南淀粉深加工展览会亮点:玉米科技与未来产业发展
  • 03-dockerfile
  • C++继承中的虚函数机制:从单继承到多继承的深度解析
  • 【ansible】2.实施ansible playbook
  • 机器学习算法核心总结
  • 静/动态库 IIC(arm) day58
  • 医疗问答应用:UniApp + Node.js + DeepSeek API
  • Objective-C 版本的 LiveEventBus 效果
  • 直流无刷(BLDC)电机、单相直流无刷电机、三相直流无刷电机、单相直流无刷电机驱动芯片
  • 齐次线性方程组最小二乘解
  • 从零开始学AI——13
  • Docker复杂安装--最详细的MySQL主从复制与Redis集群安装、主从复制、主从扩容主从缩容实战版
  • java线程池相关知识
  • XR(AR/VR/MR)芯片方案,Soc VS “MCU+协处理器”?
  • 【动态规划、dp】P4933 大师
  • pnpm : 无法加载文件 C:\Program Files\nodejs\pnpm.ps1,因为在此系统上禁止运行脚本。
  • C++之多态(从0到1的突破)
  • Python如何将两个列表转化为一个字典
  • 基于STM32的APP遥控视频水泵小车设计
  • Codeforces MIN = GCD
  • Python爬虫实战:研究dark-fantasy,构建奇幻文学数据采集分析系统
  • BM25 vs TF-IDF:经典文本检索方法的对比
  • 【39】OpenCV C++实战篇——直线拟合、直线测距、平行线段测距;(边缘检测,剔除噪点,轮廓检测,渐进概率霍夫直线)
  • Django管理后台结合剪映实现课件视频生成应用
  • MySQL架构
  • MySQL实战45讲 24-25