初步压测的 nginx反向代理 到 Spring Cloud网关 到 Spring Cloud微服务的网络参考配置

1.nginx反向代理配置

复制代码
apiVersion: v1
kind: ConfigMap
metadata:
  name: nginx-reverse-proxy-configmap
data:
  nginx.conf: |
    user nginx;
    worker_processes 1;
    worker_rlimit_nofile 262144;     # 增加文件描述符限制

    error_log /etc/nginx/logs/error.log warn;
    pid /var/run/nginx.pid;
    
    events {
       worker_connections 65536;   # 每个worker最大连接数
       multi_accept on;
       use epoll;
       accept_mutex off;           # 在高并发时关闭互斥锁
       
    }

    http {
      server_tokens off;
      include       mime.types;
      default_type  application/octet-stream;
      client_max_body_size 10G;  # 设置请求体最大为 10G

      # 1. 调整上游服务配置,使用连接池
    upstream spring_cloud_backend {
        server 10.247.194.211:8080; # 你的 Spring Cloud 服务地址
        # 可选:设置长连接数量,对于 HTTP/1.1 很重要
        keepalive 64; # 每个 Worker 进程与上游服务保持的空闲长连接数量
    }
      
      server {
        listen 80;

       location /gwadmin/ {
            if ($request_method = OPTIONS) {
                add_header Access-Control-Allow-Origin $http_origin;
                add_header "Access-Control-Allow-Headers" "Authorization, Origin, X-Requested-With, Content-Type, Accept";
                add_header Access-Control-Allow-Methods GET,POST,OPTIONS,HEAD,PUT,DELETE;
                add_header Access-Control-Allow-Credentials true;
                return 200;
            }
     
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_pass http://10.247.149.252:7000/;
            #proxy_pass http://www.baidu.com/;
        }

        #官网后台管理前端页面	
        location /guanwangadmin/ {
            alias   html/guanwangadmin/;
            # VUE History 模式下刷新网页404问题
            try_files $uri $uri/ /guanwangadmin/index.html;
            index  index.html;
            #expires 12h;
            add_header Cache-Control "no-cache,must-revalidate";
            error_log off;
            access_log off;
        }

        location /gwapi/ {
            if ($request_method = OPTIONS) {
                add_header Access-Control-Allow-Origin $http_origin;
                add_header "Access-Control-Allow-Headers" "Authorization, Origin, X-Requested-With, Content-Type, Accept";
                add_header Access-Control-Allow-Methods GET,POST,OPTIONS,HEAD,PUT,DELETE;
                add_header Access-Control-Allow-Credentials true;
                return 200;
            }
     
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_pass http://10.247.163.240:7002/;
            #proxy_pass http://www.baidu.com/;
        }

        #名门望族app接口
    location /mmwzGateWay/ {
        if ($request_method = OPTIONS) {
            add_header Access-Control-Allow-Origin $http_origin;
            add_header "Access-Control-Allow-Headers" "Authorization, Origin, X-Requested-With, Content-Type, Accept";
            add_header Access-Control-Allow-Methods GET,POST,OPTIONS,HEAD,PUT,DELETE;
            add_header Access-Control-Allow-Credentials true;
            return 200;
        }
        # 去掉 /mmwzGateWay/ 前缀
        rewrite ^/mmwzGateWay/(.*)$ /$1 break;
        proxy_pass http://spring_cloud_backend;

        # 2. 核心:调整超时时间
            proxy_connect_timeout   60s; # Nginx 与上游服务器建立连接的超时时间
            proxy_send_timeout      60s; # Nginx 向上游服务器发送请求的超时时间
            proxy_read_timeout      60s; # Nginx 等待上游服务器响应的超时时间

            # 3. 错误处理:当上游返回特定错误时,可以重试或展示友好页面
            proxy_next_upstream error timeout http_502 http_503 http_504;
            proxy_next_upstream_tries 2; # 重试次数
            proxy_next_upstream_timeout 10s; # 重试超时

            # 4. 优化缓冲区与头部传递
            proxy_buffering on;
            proxy_buffer_size 128k;
            proxy_buffers 8 256k;
            proxy_busy_buffers_size 256k;

            # 非常重要:传递真实客户端 IP 和 Host 信息
            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;

            # 5. 启用 HTTP/1.1 到上游服务,支持 keepalive
            proxy_http_version 1.1;
            proxy_set_header Connection "";
    }

        #mmwz后台管理
    location /mmwzadmin/ {
        alias   html/mmwzadmin/;
        # VUE History 模式下刷新网页404问题
        try_files $uri $uri/ /mmwzadmin/index.html;
        index  index.html;
        #expires 12h;
        add_header Cache-Control "no-cache,must-revalidate";
        error_log off;
        access_log off;
    }
        #apph
    location /apph/ {
        alias   html/apph/;
        # VUE History 模式下刷新网页404问题
        try_files $uri $uri/ /apph/index.html;
        index  index.html;
        #expires 12h;
        add_header Cache-Control "no-cache,must-revalidate";
        error_log off;
        access_log off;
    }

        #public_static
    location /public_static/ {
        alias   html/public_static/;
        # VUE History 模式下刷新网页404问题
        try_files $uri $uri/ /public_static/index.html;
        index  index.html;
        #expires 12h;
        add_header Cache-Control "no-cache,must-revalidate";
        error_log off;
        access_log off;
    }
        location / {
          root html/guanwangweb;
          index index.html;
          try_files $uri $uri/ /index.html;
        }
      }
    }

主要看 location /mmwzGateWay/ 这个反向代理

2.Spring cloud 网关配置

复制代码
bootstrap.yml 
复制代码
# Tomcat
server:
  port: 8080

# Spring
spring: 
  application:
    # 应用名称
    name: ruoyi-gateway
  profiles:
    # 环境配置
    active: dev
  cloud:
    nacos:
      discovery:
        # 服务注册地址
        server-addr: 127.0.0.1:8848
#        #命名空间
#        namespace: e4fe4f1f-0f94-44b8-9004-d116d5735d7e
      config:
        # 配置中心地址
        server-addr: 127.0.0.1:8848
        # 配置文件格式
        file-extension: yml
        # 共享配置
        shared-configs:
          - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
#        #命名空间
#        namespace: e4fe4f1f-0f94-44b8-9004-d116d5735d7e
    sentinel:
      # 取消控制台懒加载
      eager: true
      transport:
        # 控制台地址
        dashboard: 127.0.0.1:8718
      # nacos配置持久化
      datasource:
        ds1:
          nacos:
            server-addr: 127.0.0.1:8848
            dataId: sentinel-ruoyi-gateway
            groupId: DEFAULT_GROUP
            data-type: json
            rule-type: gw-flow

nacos 配置中心 ruoyi-gateway-prod.yml

复制代码
server:
  tomcat:
    # 连接数配置(关键!)
    max-connections: 5000
    # 线程池配置(核心优化)
    max-threads: 500
    min-spare-threads: 50
    # 等待队列
    accept-count: 10000
    # 连接超时
    connection-timeout: 180s
    # 保持连接
    keep-alive-timeout: 180s
    max-keep-alive-requests: 20000
    threads:
      max: 5000                       # 如果 gateway 用 tomcat,线程也要够
  netty:
    worker-count: 1                  # 0=CPU 核数,也可手动调大

spring:
  redis:
    host: 10.247.94.224
    #port: 6379
    port: 6379
    # 数据库索引
    database: 1
    # password: 
    password: JZoxuxAKkH24qLCFH9AG
  cloud:
    sentinel:
      enabled: true
      transport:
        #port: 8723
        dashboard: 10.247.53.215:8858
        #clientIp: 127.0.0.1
      log:
        dir: /opt/jars/sentinelLog
      # nacos配置持久化
      datasource:
        ds1:
          nacos:
            server-addr: 10.247.155.16:8848
            dataId: sentinel-ruoyi-gateway
            groupId: DEFAULT_GROUP
            data-type: json
            rule-type: gw-flow  
    gateway:
      httpclient:
        # 连接超时(单位毫秒)
        connect-timeout: 2000
        # 响应超时(单位秒)
        response-timeout: 2000s
        keep-alive: false
        # 连接池配置
        pool:
          type: elastic          # 连接池类型
          name: gateway-http-client-pool
          max-connections: 100000  # 最大连接数
          acquire-timeout: 450000 # 获取连接超时时间
          max-idle-time: 600s     # 最大空闲时间
          max-life-time: 600s     # 建议添加:最大生存时间
          pending-acquire-timeout: 60s  # 等待获取连接超时
          evict-in-background: true     # 后台清理空闲连接
      default-filters:
        - DedupeResponseHeader=Access-Control-Allow-Credentials Access-Control-Allow-Origin    
      discovery:
        locator:
          lowerCaseServiceId: true
          enabled: true
      http:
        initial-connections: 100  # 每个客户端的初始连接数
        max-initial-connections: 1000  # 每个客户端的最大初始连接数
        max-initial-connections-per-host: 500  # 每个主机的最大初始连接数
        max-initial-connections-per-destination: 500  # 每个目的地的最大初始连接数
      thread-pool:
        fixed:
          core-size: 32  # 核心线程数
          max-size: 64  # 最大线程数
          queue-capacity: 2048  # 队列容量          
      routes:
        # 认证中心
        - id: ruoyi-auth
          uri: lb://ruoyi-auth
          predicates:
            - Path=/auth/**
          filters:
            # 验证码处理
            - CacheRequestFilter
            - ValidateCodeFilter
            - StripPrefix=1
        # 代码生成
        - id: ruoyi-gen
          uri: lb://ruoyi-gen
          predicates:
            - Path=/code/**
          filters:
            - StripPrefix=1
        # 定时任务
        - id: ruoyi-job
          uri: lb://ruoyi-job
          predicates:
            - Path=/schedule/**
          filters:
            - StripPrefix=1
        # 系统模块
        - id: ruoyi-system
          uri: lb://ruoyi-system
          predicates:
            - Path=/system/**
          filters:
            - StripPrefix=1
        # 文件服务
        - id: ruoyi-file
          uri: lb://ruoyi-file
          predicates:
            - Path=/file/**
          filters:
            - StripPrefix=1
        # 用户服务
        - id: ruoyi-user
          uri: lb://ruoyi-user
          predicates:
            - Path=/user/**
          filters:
            - StripPrefix=1  
        - id: ruoyi-userSocket
          uri: lb:ws://ruoyi-user
          predicates:
            - Path=/userWebSocket/**
          filters:
            - StripPrefix=1          
        # 家族传承服务
        - id: ruoyi-inherit
          uri: lb://ruoyi-inherit
          predicates:
            - Path=/inherit/**
          filters:
            - StripPrefix=1 
        - id: ruoyi-inheritSocket
          uri: lb:ws://ruoyi-inherit
          predicates:
            - Path=/inheritWebSocket/**
          filters:
            - StripPrefix=1        
        # 图库服务
        - id: ruoyi-image
          uri: lb://ruoyi-image
          predicates:
            - Path=/image/**
          filters:
            - StripPrefix=1 
        # 根基服务
        - id: ruoyi-foundation
          uri: lb://ruoyi-foundation
          predicates:
            - Path=/foundation/**
          filters:
            - StripPrefix=1
        - id: ruoyi-foundationWebSocket
          uri: lb:ws://ruoyi-foundation
          predicates:
            - Path=/foundationWebSocket/**
          filters:
            - StripPrefix=1    
        # 商城服务
        - id: ruoyi-mall
          uri: lb://ruoyi-mall
          predicates:
            - Path=/mall/**
          filters:
            - StripPrefix=1
         # ai服务
        - id: ruoyi-ai
          uri: lb://ruoyi-ai
          predicates:
            - Path=/ai/**
          filters:
            - StripPrefix=1                  
# 安全配置
security:
  # 验证码
  captcha:
    enabled: true
    type: math
  # 防止XSS攻击
  xss:
    enabled: true
    excludeUrls:
      - /system/notice
      - /user/mingmenSysInfo

  # 不校验白名单
  ignore:
    whites:
      - /auth/logout
      - /auth/login
      - /auth/register
      - /*/v2/api-docs
      - /*/v3/api-docs
      - /csrf
      - /auth/app/login
      - /auth/app/register
      - /auth/app/logout
      - /user/api/user/loginSendSMSVerificationCode
      - /user/api/user/registerSendSMSVerificationCode
      - /auth/app/loginSmsVerificationCode
      - /user/api/test/test1
      - /user/api/user/forgotPasswordSendSMSVerificationCode
      - /user/api/user/rechargePassword
      - /user/api/mingmenSysInfo/getByKey
      - /foundationWebSocket/api/**
      - /file/statics/**
      - /user/api/user/checkPhoneRegistrable
      - /ai/api/mingmenAiRole/downloadOutputDetailsFileKey
      - /inherit/api/ffmpeg/avatarAndPhotoFrame
      - /foundation/api/generateImages/getTitle
      - /foundation/api/generateImages/getEllipseHead
      - /inheritWebSocket/api/**
      - /userWebSocket/api/**
      - /user/api/mmBusinessRecitationCache/getCacheById
      - /user/api/dict/list/*
      - /foundation/api/generateImages/getGravestoneImageOne
      - /foundation/api/generateImages/getGravestoneImageTwo
#      - /image/api/mingmenGenerateVideo/test1
#      - /image/api/mingmenGenerateVideo/test2
#      - /image/api/mingmenGenerateVideo/test3
      - /*/public/**
      - /user/payment/alipay/notify
      - /auth/app/loginWeiXinCode
# springdoc配置
springdoc:
  webjars:
    # 访问前缀
    prefix:

3.业务模块配置

复制代码
bootstrap.yml
复制代码
# Tomcat
server:
  port: 9204

# Spring
spring:
  application:
    # 应用名称
    name: ruoyi-inherit
  profiles:
    # 环境配置
    active: dev
  cloud:
    nacos:
      discovery:
        # 服务注册地址
        server-addr: 127.0.0.1:8848
        #命名空间
        #namespace: e4fe4f1f-0f94-44b8-9004-d116d5735d7e
      config:
        # 配置中心地址
        server-addr: 127.0.0.1:8848
        # 配置文件格式
        file-extension: yml
        # 共享配置
        shared-configs:
          - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
        #命名空间
        #namespace: e4fe4f1f-0f94-44b8-9004-d116d5735d7e
image:
  maxsize: 8
video:
  maxsize: 50
OSS:
  endpoint: oss-cn-beijing.aliyuncs.com
  bucketName: ja-oss
  accessKeyId: LTAIUc1dQa8ct
  accessKeySecret: WjIoFLH

nacos配置中心 ruoyi-inherit-prod.yml

复制代码
#I/O 密集型业务
server:
  tomcat:
    max-threads: 20000           # 可以设置更多线程等待 I/O
    min-spare-threads: 200
    max-connections: 10000
    accept-count: 500
    keep-alive-timeout: 120s
    max-keep-alive-requests: 10000
    connection-timeout: 60s

# spring配置
spring:
  servlet:
    multipart:
      max-file-size: 10GB
      max-request-size: 10GB
  cloud:
    sentinel:
      enabled: true
      transport:
        #port: 8719
        dashboard: 10.247.53.215:8858
        #clientIp: 127.0.0.1
      log:
        dir: /opt/jars/sentinelLog
  redis:
    host: 10.247.94.224
    #port: 6379
    port: 6379
    # 数据库索引
    database: 1
    # password: 
    password: JZoxuxAKkH24qLCFH9AG
  datasource:
    druid:
      stat-view-servlet:
        enabled: true
        loginUsername: admin
        loginPassword: 123456
    dynamic:
      druid:
        initial-size: 5
        min-idle: 5
        maxActive: 20
        maxWait: 60000
        timeBetweenEvictionRunsMillis: 60000
        minEvictableIdleTimeMillis: 300000
        validationQuery: SELECT 1 FROM DUAL
        testWhileIdle: true
        testOnBorrow: true
        testOnReturn: false
        poolPreparedStatements: true
        maxPoolPreparedStatementPerConnectionSize: 20
        filters: stat,slf4j
        connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000
      datasource:
          # 主库数据源
          master:
            driver-class-name: com.mysql.cj.jdbc.Driver
            url: jdbc:mysql://1:3306/mmwz_inherit_prod?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&autoReconnectForPools=true&connectTimeout=30000&socketTimeout=60000
            username: rt
            password: As34
          # 从库数据源
          # slave:
            # username: 
            # password: 
            # url: 
            # driver-class-name: 
      seata: true    # 开启seata代理,开启后默认每个数据源都代理,如果某个不需要代理可单独关闭
# mybatis配置
mybatis-plus:
    # 搜索指定包别名
    typeAliasesPackage: com.ruoyi.inherit.domain
    # 配置mapper的扫描,找到所有的mapper.xml映射文件
    mapperLocations: classpath:mapper/**/*.xml
    global-config:
      db-config:
        logic-delete-field: del_flag
        logic-delete-value: 1
        logic-not-delete-value: 0
    configuration:
      log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
      logging:
        enableSqlLog: true

# swagger配置
swagger:
  title: 系统模块接口文档
  license: Powered By ruoyi
  licenseUrl: https://ruoyi.vip

# seata配置
seata:
  # 默认关闭,如需启用spring.datasource.dynami.seata需要同时开启
  enabled: true
  # Seata 应用编号,默认为 ${spring.application.name}
  application-id: seata-server
  # Seata 事务组编号,用于 TC 集群名
  tx-service-group: default_tx_group
  # 关闭自动代理
  enable-auto-data-source-proxy: false
  # 服务配置项
  service:
    # 虚拟组和分组的映射
    vgroup-mapping:
      default_tx_group: DEFAULT
  registry:
    type: nacos
    nacos:
      application: seata-server
      server-addr: 10.247.155.16:8848
      namespace:
      username: nacos
      password: nacos
      group: DEFAULT_GROUP
  data-source-proxy-mode: XA

#image:
#  maxsize: 8
#video:
#  maxsize: 50
#OSS:
#  endpoint: oss-cnuncs.com
#  bucketName: jav-oss
#  accessKeyId: LTAI8ct
#  accessKeySecret: WjIoXhFLH


huawei:
  cloud:
    accessKeyId: HPUAACOAP
    accessKeySecret: 4BQ2xS72ZLsqhG
    content-review:
      moderationRegion: cnh-4
      projectId: 716922ba88d8    

项目基于若依微服务版,nginx spring cloud网关和微服务,都是1核2G的配置 qps达到600 - 700左右

相关推荐
爱内卷的学霸一枚5 分钟前
现代微服务架构实践:从设计到部署的深度解析
windows·微服务·架构
小码哥0681 小时前
代驾系统微服务容器化部署与灰度发布流程
微服务·云原生·代驾系统·代驾·代驾服务·同城代驾
萧曵 丶1 小时前
Nginx 高频面试题(含答案)
运维·nginx
键盘帽子2 小时前
多线程情况下长连接中的session并发问题
java·开发语言·spring boot·spring·spring cloud
Crazy Struggle3 小时前
推荐 .NET 8.0 开源项目伪微服务框架
微服务·.net 8.0·微服务框架
无名的小白3 小时前
openclaw使用nginx反代部署过程 与disconnected (1008): pairing required解决
java·前端·nginx
wengad3 小时前
podman搭建nginx服务
运维·nginx·podman
小马爱打代码4 小时前
熔断限流从入门到实战:打造高可用微服务架构
微服务·云原生·架构
黑棠会长5 小时前
微服务实战.06 |微服务对话时,你选择打电话还是发邮件?
微服务·云原生·架构·c#
程序员泠零澪回家种桔子6 小时前
微服务日志治理:ELK 栈实战指南
后端·elk·微服务·云原生·架构