nacos+nginx动态配置大文件上传限制

前言

      今天还要跟大家分享的一个点就是微服务网关gateway用webflux响应式不用servlet后,引发的一个忽略点差点在演示的时候炸锅,也不多讲废话,说说现象,说说处理就了事。


一、上传超过20MB的视频报错

  • 配置在nacos里,读取配置用的@value注解
  • 发布新配置,拦截不生效
  • 用了nginx
    就是这么个现象,其实大概也知道原因。

二、初步分析原因

  • 首先这是小弟写的,我不想动。
  • 其次可以理解是培养试验小弟,谁知道中午小弟直接就去吃饭了,留我一个人在这。
  • 最后,还得是自己顶上。
          目前,自己确实是软开的小管理,但是其实还是处于协管,因为我才来,其他人都是老资历,所以老板派了个老资历主管帮我协管。
          这小弟也是在这做兼职,觉得可以,留下来换血的。
          运维是自己招的,去吃饭还说了声,小弟啥都没说,回头就看不到人了。。。。。。
    原因就下面:
  • gateway是webflux响应式的,基因就不支持大文件
  • 上传接口的网关
  • 配置限制在nacos里,但是读取姿势不对
  • 使用@value注解读取的

三、正确处理

1.nacos里的配置

spring:
  servlet:
    multipart:
      max-file-size: 102MB
      max-request-size: 300MB

2.nginx的代理配置

location /upload/{
	proxy pass http://ip:子服务端口/;#后端服务直连
}

      这里其实就是按照国际惯例处理,上传文件绕过gateway网管,直连上传接口的子服务。其实国际惯例是上传到第三方服务,但是我们这不是才开始,经费有限,先磁盘吧。

3.nginx配置大文件

      这里是配置的全局max_client_body:2048MB

4.前端代理

      前端处理代理,将/upload代理直接到子服务端口。

5.读取配置采用

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;


/**
 * 上传配置类
 *
 * @author zwmac
 */
@Component
@ConfigurationProperties(prefix = "spring.servlet.multipart")
@Data
public class UploadConfig {
    private String maxFileSize;
    private String maxRequestSize;
}

6.使用配置


import com.rs.gov.config.upload.UploadConfig;
import com.rs.gov.entity.RestResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MaxUploadSizeExceededException;

@ControllerAdvice
public class GlobalFileExceptionHandler {

    @Autowired
    private UploadConfig uploadConfig;

    @ExceptionHandler(MaxUploadSizeExceededException.class)
    @ResponseBody
    public RestResponse<String> handleMaxSizeException(MaxUploadSizeExceededException exc) {
        // 返回自定义的错误信息
        String maxSize = uploadConfig.getMaxFileSize();
        return RestResponse.fail("文件大小超过"+maxSize+"限制");
    }
}

      基本上就ok了,小弟还给前端整了个获取上传大小的接口,现在nacos里就可以动态修改了。
nacos+nginx动态配置大文件上传限制_第1张图片
      废话也不多说了,还在支持现场演示呢!这也是坑,当时是代理兼职做997一周多点做的,没有配测试岗,家里又没有机器测试,开发自测还是不够。


总结

  • gateway是webflux响应式的,不是servlet,也就是大文件不支持
  • @value读取nacos的姿势不太对,nacos的配置他只能读取到第一次,新发布的它步读取了,(也有可能一次都读不到,反正就是启动读取配置时机不太对)
  • nginx有大文件限制,需要配置max_client_body
    微服务大文件上传的通用做法是使用第三方服务,非要自己存储就绕过gateway。
          希望能帮到大家,uping!

你可能感兴趣的:(nacos+nginx动态配置大文件上传限制)