Welcome! Log In Create A New Profile

Advanced

Re: nginx-Range header-proxy cache- potential patch

Maxim Dounin
April 26, 2012 10:16AM
Hello!

On Thu, Apr 26, 2012 at 03:23:53PM +0200, Antoine Bonavita wrote:

> Hello,
>
> I'm currently using nginx to serve "small" video files (<2MB) to
> mobile devices. The way I set it up is as follow:
> 2 nginx servers reverse proxying with cache
> 1 upstream server where the files are actually uploaded
>
> It's all working fine except that the iPhones seem to have the habit
> of always doing range requests with range 0-1 first when they are
> about to play a video. And they really don't like it when they get the
> full answer.
>
> Now, the problem I'm facing is the one described here:
> http://forum.nginx.org/read.php?2,215141,215141#msg-215141
>
> Which can be summed up as:
> - If file in cache: range header honored (206, appropriate
> Cotnent-Length and Content-Range).
> - If file not in cache: server ignores the range header and sends the
> full file (200 and Content-Length set to full file size).
>
> Now, to the question "Is this intended behavior", Maxim Dounim said
> "yes" (http://forum.nginx.org/read.php?2,215141,215142#msg-215142)
>
> I looked at the code and there is a flag on request : r->allow_ranges.
>
> From what I can tell, it is set to false in most cases, except in the
> ngx_http_static_module. I would be happy to work on a patch that
> allows ranges in all cases when the length of the response from
> upstream is known (ie not when upstream response uses chunked
> encoding).
>
> But before I start working on this I would really appreciate if one of
> the gurus here could tell me whether I'm opening a Pandora box or not.
> And what I should be careful with.

I've recently committed the patch which makes it (almost) safe to
just set allow_ranges on proxied replies, see

http://trac.nginx.org/nginx/changeset/4468/nginx

Remaining issues are with multiple ranges requests (which aren't
really used by anyone in real life except Adobe Acrobat). As long
as there are no such requests in your environment (or you are
using max_ranges 1; anyway), you may try the following patch:

# HG changeset patch
# Parent 8a7ee0318b175b8d76275c5d34707eb52b276188
Upstream: allow ranges for cacheable replies.

diff --git a/src/http/ngx_http_upstream.c b/src/http/ngx_http_upstream.c
--- a/src/http/ngx_http_upstream.c
+++ b/src/http/ngx_http_upstream.c
@@ -3680,10 +3680,9 @@ ngx_http_upstream_copy_allow_ranges(ngx_

#if (NGX_HTTP_CACHE)

- if (r->cached) {
+ if (r->cached || r->upstream->cacheable) {
r->allow_ranges = 1;
return NGX_OK;
-
}

#endif


(it's a bit old, but should apply cleanly)

Maxim Dounin

_______________________________________________
nginx mailing list
nginx@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx
Subject Author Posted

nginx-Range header-proxy cache- potential patch

Antoine Bonavita April 26, 2012 09:26AM

Re: nginx-Range header-proxy cache- potential patch

Maxim Dounin April 26, 2012 10:16AM

Re: nginx-Range header-proxy cache- potential patch

Antoine Bonavita April 26, 2012 10:50AM

Re: nginx-Range header-proxy cache- potential patch

Antoine Bonavita April 30, 2012 12:32PM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 245
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready