发送大文件的NGINX在某些情况下不会发送所有数据

时间:2016-11-22 23:55:28

标签: php nginx

我有一个简单的电影文件(mkv),我通过nginx发送。

我的Nginx配置如下

user  nginx;
worker_processes  auto;

worker_rlimit_nofile 300000;
events {
    worker_connections  16000;
    use epoll;
    accept_mutex on;
}

http {

    include       mime.types;
    default_type  application/octet-stream;

    sendfile           on;
    tcp_nopush         on;
    tcp_nodelay        on;
    gzip off;

    access_log off;
    keepalive_timeout 10;
    client_max_body_size 0;

    server {
        listen 5050;
        index index.html index.htm;
        root /var/www/;
        server_tokens off;
        chunked_transfer_encoding off;

        if ( $request_method !~ ^(GET|POST)$ ) {
            return 200;
        }

    }
}

如果我尝试从快速连接下载电影(例如使用服务器中的wget),则电影正在成功下载。

如果我尝试使用较慢的连接来获取电影,例如使用带有-re参数的ffmpeg(本机帧),它将只下载电影的一半。当然,如果我使用wget并将下载速度调整为远低于正常速度,则会发生同样的情况。

nginx的连接在一段时间后关闭但没有发送整个文件,我不明白为什么会发生这种情况以及为什么如果我有快速连接就不会发生这种情况。

修改

i完全编辑我的帖子,因为在运行一些测试之后我发现问题来自NGINX,而不是来自PHP,因为直接从nginx获取电影后连接仍然关闭。

1 个答案:

答案 0 :(得分:0)

从你刚开始说的话来看,这似乎是set_time_limit()的一个问题,尝试增加价值,确保你可以调整这个值,有些服务器不允许这样做。< / p>