Nginx 根据文件大小限制下载速度

Nginx 根据文件大小限制下载速度

我正在使用nginx/1.11.11mp4 模块从源代码编译,并且提供从 300MB 到 8GB 大小的视频文件。

我正在考虑实现一个类似于谷歌驱动器的节流系统。如果文件大小很大,则设置较大的,limit_rate如果文件大小较小,则设置较小的limit_rate。问题是我找不到获取所提供文件大小的方法。

我的default.conf文件如下所示:

server {
    listen       80;
    server_name  _; # change this for your server
    root /var/www;
    index index.php;
    client_max_body_size 5G;
    proxy_read_timeout 60000000;

    # handle requests to the API
    location ~ /api/v2/(.+)$ {
        if (!-e $request_filename) { rewrite ^/api/v2/(.*) /api/v2/index.php?_page_url=$1 last; }
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param MOD_X_ACCEL_REDIRECT_ENABLED on;
        fastcgi_param  SCRIPT_FILENAME   $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    location ~ \.php$ {
        if (!-e $request_filename) { rewrite ^/(.*) /index.php?_page_url=$1 last; }
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_read_timeout 180000000;
        fastcgi_param MOD_X_ACCEL_REDIRECT_ENABLED on;
        fastcgi_param  SCRIPT_FILENAME   $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }

    location / {
        if (!-e $request_filename) {
                rewrite ^/(.*) /index.php?_page_url=$1 last;
        }
    }
    location /files/ {
        root /var/www;
        aio threads;
        internal;
        mp4;
        limit_rate_after 5m;
        limit_rate 400k;
    }

    # these locations would be hidden by .htaccess normally
    location /core/logs/ {
        deny all;
    }

答案1

Nginx 还有limit_rate_after 尺寸:“设置初始数量,超过该数量后,向客户端进一步传输响应的速率将受到限制。”

答案2

问题是我找不到获取所提供文件的大小的方法。

您可以尝试使用 LUA 脚本来查找文件的大小。

看一眼openresty项目。

文档:https://github.com/openresty/lua-nginx-module

有一个相关的openresty模块用于通过lua配置nginx: https://github.com/fanhattan/lua-resty-rate-limit

您可以尝试根据您的情况实现类似的模块。

相关内容