nginx反向代理+upstream轮询是java微服务在linux上最常用、最轻量的负载均衡方案;通过http块定义upstream组(支持weight、max_fails、fail_timeout等参数),server块中用proxy_pass引用,并配置proxy_set_header和proxy_next_upstream确保请求转发正确与故障自动重试。

确认 Java 微服务已就绪
确保每个微服务实例已独立启动并监听不同端口(如 8081、8082、8083),且能正常响应健康检查接口(如 /actuator/health)。建议用 curl http://localhost:8081/actuator/health 验证单点连通性。
在 nginx.conf 或独立 conf 文件中定义 upstream 组
编辑 /etc/nginx/conf.d/microservice.conf(推荐单独文件,便于管理):
复制AI写代码
1 upstream ms_cluster {
2 server 127.0.0.1:8081 weight=2 max_fails=3 fail_timeout=30s;
3 server 127.0.0.1:8082 weight=2 max_fails=3 fail_timeout=30s;
4 server 127.0.0.1:8083 weight=1 max_fails=3 fail_timeout=30s;
5 }
说明:
– 每行一个 Java 服务实例,IP 可为本机或内网地址;
– weight 控制流量比例(此处前两台承担更多请求);
– max_fails/fail_timeout 启用被动健康检查,连续失败 3 次后暂停转发 30 秒;
– 若某实例临时不可用,Nginx 自动跳过,不中断整体服务。
配置 server 块完成反向代理
在同一文件中添加:
复制AI写代码
6 server {
7 listen 80;
8 server_name api.example.com;
9
10 location / {
11 proxy_pass http://ms_cluster;
12 proxy_set_header Host $host;
13 proxy_set_header X-Real-IP $remote_addr;
14 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
15 proxy_set_header X-Forwarded-Proto $scheme;
16 proxy_connect_timeout 5s;
17 proxy_read_timeout 30s;
18 proxy_next_upstream error timeout http_500 http_502;
19 }
20 }
关键点:
– proxy_pass 必须带协议和斜杠结尾(http://ms_cluster),否则路径重写可能出错;
– proxy_next_upstream 让 Nginx 在遇到错误时自动重试另一节点;
– Java 应用若依赖原始 Host 或客户端 IP,这些 proxy_set_header 行必不可少。
验证与日常维护要点
执行以下操作确认生效:
– 运行 sudo nginx -t 检查语法;
– 执行 sudo systemctl reload nginx 热更新配置;
– 多次请求 curl http://api.example.com/actuator/health,观察响应头中的 X-Upstream-Addr(需提前加 proxy_set_header X-Upstream-Addr $upstream_addr;)或后端 access 日志,确认请求确实轮转到不同端口;
– 暂停其中一个 Java 实例(如 kill -9 PID),再发请求,应仍能成功——验证故障自动摘除能力。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











