向移动设备提供mp3会使部分请求淹没nginx

我用简单的nginx服务器来提供mp3。 我在日志文件中看到的是,有很多请求,特别是来自AppleCoreMedia,有时是Android的使用者,它们使用短的请求来洪泛服务器。 有时他们会一直要求下载相同的部分内容很长一段时间; 有时一个多小时。 例如:


 “GET /somefile.mp3 HTTP / 1.1”206 33041“AppleCoreMedia / 1.0.0.9B206(iPhone; U; CPU OS 5_1_1,如Mac OS X; en_us)”
 “GET /somefile.mp3 HTTP / 1.1”206 33041“AppleCoreMedia / 1.0.0.9B206(iPhone; U; CPU OS 5_1_1,如Mac OS X; en_us)”
 “GET /somefile.mp3 HTTP / 1.1”206 33041“AppleCoreMedia / 1.0.0.9B206(iPhone; U; CPU OS 5_1_1,如Mac OS X; en_us)”
 [...]

我也得到了很多,但不是那么多,其中:

 “ - ”400 0“ - ” 
 “ - ”400 0“ - ”

IP地址始终来自在请求后不久开始下载的客户端,通常它们具有与第一个示例中大致相同的UserAgent。 强调的文本我已经启用服务器限制和连接限制在nginx限制至less有一些来自等效IP的大量的日志条目。

在使用Apache的前一台服务器上看到相同的行为时,出现性能问题。 我在一台更好的服务器上安装了nginx,然后移动了这个站点。 当Apache无法有效地处理越来越多的客户端连接到服务器的更多连接。 已连接的客户端没有带宽问题,我不知道已经连接的客户端是否一次使用多个连接。

请告诉我:

  • 客户似乎在下载Bad Thing™时遇到困难

我听到有人说他们的移动带宽使用率远高于他们所能解释的。 我认为这种客户行为可以解释这一点。 而且我们也花费更多的带宽。

  • 那里有哪些最新的替代品可以处理这种types的数据比普通的HTTP更好?
  • 对于刚刚进入这个领域的人来说,有用的一般见解直到90年代末。 🙂

第二个问题:

"-" 400 0 "-" 

这通常意味着客户端打开了一个Keep-Alive连接,但是在收到对之前请求的响应之后就断开了连接。 由于Web服务器正在等待,它会logging一个错误的请求(HTTP 400)。 这些大多是无害的。

现在,iPhone下载部分内容有什么问题? 只是日志文件很大 ? 您可以使用nginx指令closures特定请求的日志logging。 如果它导致性能问题 ,或者如果客户端无法访问资源,那么也许你应该开始担心。 但是你没有明确地提到这些。

(所有这一切,从iPhone的这种奇怪的行为,它浪费了networking资源和电池的寿命,移动设备短缺东西)。

iOS会对video/audio内容进行范围请求,包括如果通过<video><audio> HTML5标签<audio> ,一旦用户有足够的时间听取一段时间,就会中止播放。 这是一件好事 – 它只会根据需要抓取它们,所以如果有人不听/看整个事情,就不会浪费带宽发送整个文件。