目录
1、部署springboot应用
在三台机器上分别启动 Spring Boot 项目,确保它们能够独立对外提供服务。
可以使用 java -jar 命令启动,或通过 systemd、docker 等方式。
验证方式:在每台机器上执行 curl http://localhost:8080/health(如果有健康检查接口),或者直接浏览器访问 http://机器IP:8080,确认返回正常。
2、安装Nginx
以 CentOS 7 / RHEL 为例:
bash
# 添加 Nginx 官方源(可选,但推荐)
sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
# 安装 Nginx
sudo yum install -y nginx
# 启动并设置开机自启
sudo systemctl start nginx
sudo systemctl enable nginx
访问 http://nginx服务器IP,看到 Nginx 欢迎页即成功。

3、配置Nginx日志打印格式
编辑主配置文件 /etc/nginx/nginx.conf
bash
sudo vi /etc/nginx/nginx.conf
找到 http { ... } 块,在它的内部 (例如在 include 语句之前或之后)添加自定义日志格式:
bash
http {
# 已有的配置(如 sendfile, tcp_nopush 等)
# 添加自定义日志格式,包含 upstream 地址
log_format upstream_log '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" '
'upstream_addr="$upstream_addr"';
# 如果有其他日志格式(如 main),保留不变
# 原有的 include 语句,例如:
include /etc/nginx/conf.d/*.conf;
}
在下一步中,设置使用自定义格式的访问日志
4、配置Nginx负载均衡
Nginx 的主配置文件通常是 /etc/nginx/nginx.conf,但一般将自定义配置放在 /etc/nginx/conf.d/ 目录下,便于管理。
创建应用配置文件:
bash
sudo vi /etc/nginx/conf.d/springboot-cluster.conf
写下以下配置:
bash
upstream backend {
# 负载均衡策略:默认为轮询(round-robin)
# 可选:ip_hash(基于客户端IP哈希,保持会话粘性)
# 可选:least_conn(最小连接数)
server 192.168.1.10:8080 weight=1 max_fails=3 fail_timeout=30s;
server 192.168.1.11:8080 weight=1 max_fails=3 fail_timeout=30s;
server 192.168.1.12:8080 weight=1 max_fails=3 fail_timeout=30s;
# 如果某一台服务器出现故障,Nginx 会暂时将其标记为不可用,并在 fail_timeout 后重试
}
server {
listen 80;
server_name your-domain.com; # 或直接使用 IP,如 192.168.1.100
# 访问日志(可选):保留原有日志格式(如用于其他统计),并添加自定义格式的访问日志
access_log /var/log/nginx/springboot-access.log main;
access_log /var/log/nginx/springboot-upstream.log upstream_log;
error_log /var/log/nginx/springboot-error.log;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# 超时设置(根据业务调整)
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
}
}
-
upstream backend:定义后端服务器组,名称可自定义。
-
server 指令:
weight为权重,数字越大分配流量越多;max_fails和fail_timeout配合实现健康检查:在fail_timeout秒内如果失败max_fails次,则暂时将该服务器标记为不可用,等待fail_timeout秒后再次尝试。 -
proxy_pass:将请求转发到 upstream 定义的服务器组。
-
proxy_set_header :传递真实客户端 IP 等信息,方便 Spring Boot 应用通过
X-Forwarded-For获取。
如果需要 会话保持(Session Sticky) ,可以使用 ip_hash 策略(将同一客户端 IP 的请求始终转发到同一台后端),但更推荐使用 Redis 共享 Session 方案。如果一定要用,在 upstream 块中添加:
bash
upstream backend {
ip_hash;
server 192.168.1.10:8080;
server 192.168.1.11:8080;
server 192.168.1.12:8080;
}
如果希望使用 HTTPS,在 server 块中添加证书配置:
bash
server {
listen 443 ssl;
server_name your-domain.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/privkey.pem;
# 其他配置同 http 部分
}
如果 Spring Boot 应用有静态资源,可以配置 Nginx 直接代理静态文件,减轻后端压力:
bash
location /static/ {
alias /path/to/static/files/;
expires 30d;
}
location / {
proxy_pass http://backend;
}
5、测试配置并重载
bash
sudo nginx -t # 检查配置文件语法
sudo systemctl reload nginx # 重载配置,不中断服务
6、验证负载均衡效果
-
访问 Nginx 服务:
在浏览器中访问
http://nginx服务器IP,多次刷新,观察是否轮询访问到三台应用。也可以在 Spring Boot 应用中打印一个简单的标识(如机器名或 IP)到响应中,以直观确认。
-
查看 自定义Nginx 日志:
bash
tail -f /var/log/nginx/springboot-upstream.log
可以看到每一条请求被转发到的后端地址(如果配置了 $upstream_addr 变量,可自定义日志格式)。

-
模拟故障:
停止其中一台应用服务器,再次请求,观察 Nginx 是否自动将流量转发到其他两台,并且日志中可能出现 "upstream temporarily unavailable" 但请求成功。
