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。
从你刚开始说的话来看,这似乎是set_time_limit()的一个问题,试着增加值,确保你可以调整这个值,有些服务器不允许这样做。
我也试过。没有工作。另外当我连接速度很慢时,会在8分钟后关闭,而不是几秒钟,整部电影是20分钟。 – user3393046
如果您的服务器是共享的,即使将set_time_limit()调整为另一个值,它也会重置为默认值。你的服务器是共享的还是你有足够的权限来改变这个PHP值? – bruno
这是一个专用服务器,我可以做任何事情。我有root用户。 – user3393046
你确定你没尝试通过调用设置'max_execution_time'到''0'的set_time_limit(0)'在脚本的乞讨?下载开始后,慢速连接失败需要多长时间? –
你好,我编辑我的帖子,因为它不是PHP的问题,我认为。这部电影是20分钟,并且总是在8分钟和几秒钟(通常为30分钟)的同一时间结束。 – user3393046
你必须用不同的方式来完成它,并使用Nginx [XSendfile](https://www.nginx.com/resources/wiki/start/topics/examples/xsendfile/)。我做到了,并且我有一个** 5GB **文件传输约** 22 **分钟到目前为止没有中断在** 20K/s **使用'wget'。如果你愿意,我可以用我的工作例子写一个答案。 –