You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nginx反向代理时限制下载带宽,避免占满带宽的方法

解决Nginx反向代理大文件时上游带宽跑满的问题

问题根源

默认配置下,Nginx开启的proxy_buffering会将上游(云存储桶/Workers)的响应数据缓存到内存或临时文件中。即便客户端下载速度很慢,Nginx仍会全速从上游拉取完整文件,直接导致服务器带宽被占满。

解决方案

通过调整反向代理的缓冲配置,限制Nginx的上游数据缓存量,让其仅缓冲少量数据,同步匹配客户端的下载速度,避免提前拉取完整大文件。

修改后的反向代理配置

server {
    server_name  my.domain.com;
    root /var/www/html/;
    set $bucket "123456.workers.com";
    sendfile on;
      
    location / {
        resolver 1.1.1.1;

        proxy_http_version     1.1;
        proxy_redirect off;
        proxy_set_header       Connection "";
        proxy_set_header       Authorization '';
        proxy_set_header       Host $bucket;
        proxy_ssl_server_name on;
        proxy_set_header       X-Real-IP $remote_addr;
        proxy_set_header       X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_hide_header      cf-ray;
        proxy_hide_header      Content-Disposition;
        proxy_hide_header      report-to;
        proxy_hide_header      server;
        proxy_hide_header      x-amz-id-2;
        proxy_hide_header      x-amz-request-id;
        proxy_hide_header      x-amz-meta-server-side-encryption;
        proxy_hide_header      x-amz-server-side-encryption;
        proxy_hide_header      Set-Cookie;
        proxy_ignore_headers   Set-Cookie;
        proxy_intercept_errors on;

        add_header             Cache-Control max-age=31536000;
        
        # 核心修改:调整缓冲配置,匹配客户端速度
        proxy_buffering on;
        proxy_buffer_size 4k;          # 单个请求的初始缓冲区大小
        proxy_buffers 8 4k;            # 每个请求的缓冲区总大小(8*4k=32k)
        proxy_max_temp_file_size 0;    # 禁止创建临时文件缓存上游数据
        
        proxy_pass             https://$bucket; # without trailing slash
    }
      
    listen 80 default_server;
}

配置参数说明

  • proxy_buffering on;:保留缓冲功能,但通过后续参数限制缓冲规模,避免无限制拉取上游数据
  • proxy_buffer_size:调小读取上游响应头的缓冲区大小,减少不必要的内存占用
  • proxy_buffers:限制响应体的缓冲区总容量,当缓冲区满时,Nginx会暂停从上游读取,直到客户端取走部分数据
  • proxy_max_temp_file_size 0;:彻底禁止Nginx将超出内存缓冲的响应数据写入临时文件,从根源避免预下载完整大文件

备选方案:完全关闭缓冲

如果业务场景以大文件下载为主,可直接关闭缓冲,让Nginx实时转发上游数据,严格匹配客户端速度:

# 在location块内添加
proxy_buffering off;

注意:关闭缓冲会让Nginx同步处理请求,可能增加CPU负载,适合大文件占比高的场景,小请求较多时不推荐。

验证修改

重启Nginx服务生效:

sudo systemctl restart nginx

测试单个客户端下载大文件,观察服务器上游带宽使用情况,此时带宽应与客户端下载速度一致或接近。

内容的提问来源于stack exchange,提问作者Root

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 11:55:24