Nginx安装与使用

目录

1、部署springboot应用

2、安装Nginx

3、配置Nginx日志打印格式

4、配置Nginx负载均衡

5、测试配置并重载

6、验证负载均衡效果


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_failsfail_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" 但请求成功。

相关推荐
SelectDB7 小时前
Litefuse 开源并推出单进程轻量模式,25 秒就能跑起来的 Agent 可观测与评估平台
运维·后端·自动化运维
XIAOHEZIcode2 天前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
用户0328472220702 天前
如何搭建本地yum源(上)
运维
ping某3 天前
为什么 Nginx 明明监听了 80,转发后端时却用了 4xxxx 端口?
后端·nginx
大树885 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠5 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质5 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
Inhand陈工5 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智5 天前
ARP代理--工作原理
运维·网络·arp·arp代理
shushangyun_5 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化