nginx托管spring boot并实现集群负载均衡只需配置反向代理与upstream集群:单实例用proxy_pass直连8080端口并设置请求头;多实例通过upstream定义节点,配合ip_hash、least_conn等策略实现流量分发,并需动静分离与健康检查。

用 Nginx 托管 Spring Boot 项目并实现集群负载均衡,核心就两件事:让 Nginx 能把请求正确转给 Java 服务,再让多个 Java 实例能被合理分摊流量。不需要改代码,配置清楚就能跑起来。
基础反向代理:单个 Spring Boot 服务接入
这是最简起步方式,适合开发测试或小流量场景。Spring Boot 默认跑在 8080 端口,Nginx 只需把它当后端转发即可:
- 在
/etc/nginx/conf.d/java-app.conf中添加 server 块 - 用
proxy_pass http://127.0.0.1:8080指向本地 Java 服务 - 务必加上
proxy_set_header系列头,否则 Spring Boot 获取不到真实 IP 和协议 - 启动 Spring Boot 时建议加
--server.port=8080显式指定端口,避免冲突
多实例负载均衡:定义 upstream 集群
当部署多个相同应用的实例(比如三台服务器各跑一个 jar),就需要 upstream 块统一管理:
- 在 http 块外定义
upstream java_cluster { server 192.168.1.10:8080; server 192.168.1.11:8080; } - server 块中 location 里写
proxy_pass http://java_cluster,Nginx 自动轮询 - 可加
weight=3等参数调节分发比例,适合不同配置的机器 - 加
backup标记备用节点,主节点全挂时才启用
常用负载策略选型与配置要点
默认轮询够用,但业务有状态或性能不均时要换策略:
- ip_hash:加在 upstream 块开头,保证同一用户始终打到同一台机器,适合依赖 session 的老项目
- least_conn:适合长连接多、处理时间差异大的场景,Nginx 选当前连接最少的后端
- hash $request_uri consistent:URL 一致性哈希,缓存友好,适合读多写少接口
- 所有策略都支持
max_fails=3 fail_timeout=30s,自动踢掉连续失败的节点
动静分离与健康检查实战
真正上线必须区分静态资源和动态请求,还能感知后端是否活着:
- 静态文件(js/css/img)直接由 Nginx
root /var/www/static提供,不走 Java - 用
try_files $uri @fallback实现“先找静态,找不到再转 Java”,兼顾灵活性和性能 - 单独配一个
location /health,直连某个后端的/actuator/health,用于监控大盘 - 超时参数别省:
proxy_connect_timeout 60s防卡死,proxy_read_timeout 60s防慢接口拖垮 Nginx
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











