NGINX发送大文件不会在某些情况下

问题描述:

我有一个简单的电影文件(MKV),我要送过nginx的发送的所有数据。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的连接一段时间后关闭,不发送整个文件,我不明白为什么会这样,为什么,如果我有一个快速的连接不会发生。

编辑

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

+0

你确定你没尝试通过调用设置'max_execution_time'到''0'的set_time_limit(0)'在脚本的乞讨?下载开始后,慢速连接失败需要多长时间? –

+0

你好,我编辑我的帖子,因为它不是PHP的问题,我认为。这部电影是20分钟,并且总是在8分钟和几秒钟(通常为30分钟)的同一时间结束。 – user3393046

+1

你必须用不同的方式来完成它,并使用Nginx [XSendfile](https://www.nginx.com/resources/wiki/start/topics/examples/xsendfile/)。我做到了,并且我有一个** 5GB **文件传输约** 22 **分钟到目前为止没有中断在** 20K/s **使用'wget'。如果你愿意,我可以用我的工作例子写一个答案。 –

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

+0

我也试过。没有工作。另外当我连接速度很慢时,会在8分钟后关闭,而不是几秒钟,整部电影是20分钟。 – user3393046

+0

如果您的服务器是共享的,即使将set_time_limit()调整为另一个值,它也会重置为默认值。你的服务器是共享的还是你有足够的权限来改变这个PHP值? – bruno

+0

这是一个专用服务器,我可以做任何事情。我有root用户。 – user3393046