2016-11-22 37 views
0

我有一個簡單的電影文件(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'。如果你願意,我可以用我的工作例子寫一個答案。 –

回答

0

從你剛開始說的話來看,這似乎是set_time_limit()的一個問題,試着增加值,確保你可以調整這個值,有些服務器不允許這樣做。

+0

我也試過。沒有工作。另外當我連接速度很慢時,會在8分鐘後關閉,而不是幾秒鐘,整部電影是20分鐘。 – user3393046

+0

如果您的服務器是共享的,即使將set_time_limit()調整爲另一個值,它也會重置爲默認值。你的服務器是共享的還是你有足夠的權限來改變這個PHP值? – bruno

+0

這是一個專用服務器,我可以做任何事情。我有root用戶。 – user3393046

相關問題