Nginx limit upload speed

7.7k views Asked by At

I use Nginx as the reverse proxy.
How to limit the upload speed in Nginx?

1

There are 1 answers

0
Spring On BEST ANSWER

I would like to share how to limit the upload speed of reverse proxy in Nginx.
Limiting download speed is easy as a piece of cake, but not for upload.

Here is the configuration to limit upload speed

  • find your directory /etc/nginx/nginx.conf
user www-data;
worker_processes auto;
pid /run/nginx.pid;

events {
    worker_connections 1;
}

# 1)
# Add a stream
# This stream is used to limit upload speed
stream {

    upstream site {
        server your.upload-api.domain1:8080;
        server your.upload-api.domain1:8080;
    }

    server {

        listen    12345;

        # 19 MiB/min = ~332k/s
        proxy_upload_rate 332k;

        proxy_pass site;

        # you can use directly without upstream
        # your.upload-api.domain1:8080;
    }
}

http {

  server {
    
    # 2)
    # Proxy to the stream that limits upload speed
    location = /upload {
        
        # It will proxy the data immediately if off
        proxy_request_buffering off;
        
        # It will pass to the stream
        # Then the stream passes to your.api.domain1:8080/upload?$args
        proxy_pass http://127.0.0.1:12345/upload?$args;
   
    }

    # You see? limit the download speed is easy, no stream
    location /download {
        keepalive_timeout  28800s;
        proxy_read_timeout 28800s;
        proxy_buffering off;

        # 75MiB/min = ~1300kilobytes/s
        proxy_limit_rate 1300k;

        proxy_pass your.api.domain1:8080;
    }

  }

}

If your Nginx doesn't support the stream.
You may need to add a module.

static:

  • $ ./configure --with-stream
  • $ make && sudo make install

dynamic

Note: If you have a client such as HAProxy, and Nginx as a server.
You may face 504 timeout in HAProxy and 499 client is close in the Nginx while uploading large files with limiting the low upload speed.
You should increase or add timeout server: 605s or over in HAProxy because we want HAProxy not to close the connection while Nginx is busy uploading to your server. https://stackoverflow.com/a/44028228/10258377

Some references:


You will find some other ways by adding third-party modules to limit the upload speed, but it's complex and not working fine


Thank me later ;)