Nginx集群与SpringCloud Gateway集成Nacos的配置指南

Nginx集群与SpringCloud Gateway集成Nacos的配置指南

最牛逼的SpringCloudAlibab微服务实战全栈开发

环境准备

  • Nginx 1.18+
  • JDK 8+
  • SpringCloud Gateway 2.2+
  • Nacos Server 1.4+

Nginx集群配置

安装与基础配置

在每台Nginx服务器上安装Nginx,修改nginx.conf主配置文件:

复制代码
worker_processes auto;
events {
    worker_connections 10240;
    use epoll;
}

http {
    upstream gateway_cluster {
        least_conn;
        server 192.168.1.101:9999 weight=5;
        server 192.168.1.102:9999 weight=5;
        keepalive 32;
    }
}

负载均衡策略

添加负载均衡参数:

复制代码
upstream gateway_cluster {
    server 192.168.1.101:9999 max_fails=3 fail_timeout=30s;
    server 192.168.1.102:9999 max_fails=3 fail_timeout=30s;
    hash $request_uri consistent;
}

高并发优化

http块中添加:

复制代码
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
client_max_body_size 20m;
gzip on;

SpringCloud Gateway配置

POM依赖

xml 复制代码
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    <version>2.2.5.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>

bootstrap.yml

yaml 复制代码
spring:
  application:
    name: api-gateway
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
        namespace: public
    gateway:
      routes:
        - id: user-service
          uri: lb://user-service
          predicates:
            - Path=/api/user/**
          filters:
            - StripPrefix=1

动态路由配置

创建DynamicRouteConfig.java

java 复制代码
@Configuration
public class DynamicRouteConfig {
    @Bean
    public RouteDefinitionWriter routeDefinitionWriter() {
        return new InMemoryRouteDefinitionRepository();
    }
}

Nacos服务注册发现

Nacos Server配置

修改application.properties

复制代码
server.port=8848
nacos.naming.empty-service.auto-clean=true
nacos.naming.clean.empty-service.interval=60000

服务提供者配置

在服务提供者的application.yml中添加:

yaml 复制代码
spring:
  cloud:
    nacos:
      discovery:
        cluster-name: DEFAULT
        ephemeral: true
        heart-beat-interval: 5000
        heart-beat-timeout: 15000

高并发调优

Gateway线程池配置

application.yml中增加:

yaml 复制代码
server:
  tomcat:
    max-threads: 1000
    min-spare-threads: 50

Nginx健康检查

配置主动健康检查:

复制代码
upstream gateway_cluster {
    zone gateway 64k;
    server 192.168.1.101:9999 slow_start=30s;
    server 192.168.1.102:9999 slow_start=30s;
    health_check interval=5s uri=/health timeout=3s;
}

熔断限流配置

Gateway熔断设置

添加Resilience4J依赖后配置:

yaml 复制代码
spring:
  cloud:
    gateway:
      routes:
        - id: circuitbreaker_route
          uri: lb://user-service
          predicates:
            - Path=/api/user/**
          filters:
            - name: CircuitBreaker
              args:
                name: myCircuitBreaker
                fallbackUri: forward:/fallback

Redis限流配置

集成Redis限流过滤器:

java 复制代码
@Bean
public RedisRateLimiter redisRateLimiter() {
    return new RedisRateLimiter(10, 20, 1);
}

监控与日志

Prometheus监控

添加监控端点:

yaml 复制代码
management:
  endpoints:
    web:
      exposure:
        include: prometheus,health,info
  metrics:
    tags:
      application: ${spring.application.name}

Nginx日志格式化

配置访问日志格式:

复制代码
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                '$status $body_bytes_sent "$http_referer" '
                '"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main buffer=32k flush=5s;

集群验证步骤

启动Nacos Server后依次启动各服务

通过Nginx访问网关接口验证负载均衡

检查Nacos控制台服务注册状态

使用JMeter进行压力测试,监控各节点资源使用情况

常见问题处理

服务未注册:检查Nacos地址和命名空间配置

502错误:验证Gateway服务是否健康

性能瓶颈:调整Nginx的worker_connections和Gateway线程数

路由失效:确认Nacos配置的自动刷新间隔

相关推荐
GEM的左耳返13 分钟前
Java面试实战:从Spring Boot到AI集成的技术深度挑战
spring boot·redis·微服务·kafka·java面试·spring ai·缓存优化
老华带你飞15 分钟前
动物救助|流浪狗救助|基于Springboot+vue的流浪狗救助平台设计与实现(源码+数据库+文档)
java·数据库·vue.js·spring boot·论文·毕设·流浪动物救助平台
m***567230 分钟前
在Nginx上配置并开启WebDAV服务的完整指南
java·运维·nginx
Mr.朱鹏37 分钟前
RocketMQ可视化监控与管理
java·spring boot·spring·spring cloud·maven·intellij-idea·rocketmq
p***233643 分钟前
SpringBoot教程(三十二) SpringBoot集成Skywalking链路跟踪
spring boot·后端·skywalking
为什么要内卷,摆烂不香吗1 小时前
Linux 宝塔面板快速简单创建自己的网站
运维·服务器·nginx·阿里云
f***a3461 小时前
SpringBoot 如何调用 WebService 接口
java·spring boot·后端
vx_bisheyuange1 小时前
基于SpringBoot的交通在线管理服务系统
java·spring boot·后端·毕业设计
JGYBZX_G2 小时前
Spring Boot 3.x 中使用 Jasypt 时加解密不生效
spring boot
小坏讲微服务2 小时前
Spring Boot 4.0 与 MyBatis Plus 整合完整指南
java·spring boot·后端·mybatis·springcloud·mybatis plus·java开发