解决nginx文件上传限制&超时无响应

一、背景

笔者最近开发前后端分离项目遇到一些问题,后端服务是基于80/443端口反向代理的,所以请求会经过nginx网关,然后将请求代理到后端服务,这是开发环境。

二、问题

  • 文件上传大小有限制
  • 上传传时间过长无响应

二、解决方案

conf 复制代码
http {
    ...

    # 性能优化
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;

    # 客户端请求配置
    client_max_body_size 1000M;   # 解决文件上传大小限制
    client_body_buffer_size 2M; 
    client_header_buffer_size 256k;
    large_client_header_buffers 4 256k;

    # 超时设置            
    client_body_timeout 600s;
    client_header_timeout 600s;
    keepalive_timeout 120s;
    keepalive_requests 1000;

    # 反向代理配置
    proxy_connect_timeout 600s;
    proxy_send_timeout 600s;
    proxy_read_timeout 600s;
}

经过以上客户端请求配置和超时配置后按理说就解决了上面两个问题了,可是当我再进行测试的时候,接口依旧1分钟请求超时。

最后我想了一圈也没想到竟然是axios请求超时配置是60000ms,也就是1分钟,此时此刻豁然开朗了。

js 复制代码
const service = axios.create({
	baseURL: '/api', // api base_url
	timeout: 300000 // 请求超时时间, 配置为5分钟
})

再进行测试

🆗,也是上传成功了,没想到用时2.6分钟。

四、总结

配置nginx文件限制不仅仅在nginx中配置,后端服务也要配置,因为有好几层网关,例如SpringBoot的配置:

properties 复制代码
# multipart configuration
spring.servlet.multipart.max-request-size=100MB
spring.servlet.multipart.max-file-size=100MB

还有就是请求超时配置,例如axios的请求超时时间:

js 复制代码
const service = axios.create({
	baseURL: '/api', // api base_url
	timeout: 300000 // 请求超时时间, 配置为5分钟
})

最后还有nginx配置:

conf 复制代码
http {
    ...

    # 性能优化
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;

    # 客户端请求配置
    client_max_body_size 100M;   # 解决文件上传大小限制
    client_body_buffer_size 2M; 
    client_header_buffer_size 256k;
    large_client_header_buffers 4 256k;

    # 超时设置            
    client_body_timeout 600s;
    client_header_timeout 600s;
    keepalive_timeout 120s;
    keepalive_requests 1000;

    # 反向代理配置
    proxy_connect_timeout 600s;
    proxy_send_timeout 600s;
    proxy_read_timeout 600s;
}

这三板斧下来就能够解决大部分文件上传问题了。

相关推荐
墨染青竹梦悠然6 分钟前
基于Django+vue的图书借阅管理系统
前端·vue.js·后端·python·django·毕业设计·毕设
怪兽毕设12 分钟前
基于Django的洗衣服务平台设计与实现
后端·python·django·洗衣服务平台
程序员泠零澪回家种桔子31 分钟前
微服务日志治理:ELK 栈实战指南
后端·elk·微服务·云原生·架构
qq_124987075338 分钟前
基于html的书城阅读器系统的设计与实现(源码+论文+部署+安装)
前端·vue.js·spring boot·后端·mysql·信息可视化·html
CodeToGym1 小时前
【全栈进阶】Spring Boot 整合 WebSocket 实战:从实时告警到金融行情推送
java·后端·spring
Leinwin1 小时前
Moltbot 部署至 Azure Web App 完整指南:从本地到云端的安全高效跃迁
后端·python·flask
毕设源码-邱学长1 小时前
【开题答辩全过程】以 基于Springboot个人健康运动系统的设计与实现为例,包含答辩的问题和答案
java·spring boot·后端
愿你天黑有灯下雨有伞1 小时前
Spring Boot + FastExcel:打造完美的导入校验功能
java·spring boot·后端
云霄IT1 小时前
go语言post请求遭遇403反爬解决tls/ja3指纹或Cloudflare防护
开发语言·后端·golang
Dragon Wu1 小时前
OpenAPI 3.0(Swagger3/Knife4j)完整简洁注解清单
spring boot·后端·springboot