我正在使用nginx/1.11.11
mp4 模块从源代码编译,并且提供从 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
您可以尝试根据您的情况实现类似的模块。