Hanging byte-range requests for remote backend

Brendan Schwartz bschwartz at tropist.com
Tue Mar 4 18:56:40 MSK 2008


I'm attempting to proxy requests to a remote backend that supports
byte-range requests (Amazon's S3 in this case).
When I access an asset through the proxy with a byte-range request, it
downloads 99% of the response and then hangs on what seems to be the
last packet of data.
If I omit the Range header, it works perfectly. If I attempt to access
the asset directly from the backend using a Range header, it also
works perfectly.

Is what I'm trying to do possible? If it is, what is causing Nginx to
hang and not deliver that last bit of data?


Here's the applicable part of my conf:

    location /s3-proxy/ {
      proxy_set_header Host my.s3.bucket;
      proxy_redirect false;

      rewrite ^/s3-proxy/(.*)$ /$1 break;
      proxy_pass https://s3.amazonaws.com;

Here's the output when attempting to access the asset on S3 by way of Nginx:

$ curl -D- -o /dev/null
http://my.nginx.instance/s3-proxy/s3_key_of_some_object -H
HTTP/1.1 206 Partial Content
Server: nginx/0.5.35
Date: Tue, 04 Mar 2008 15:31:57 GMT
Content-Type: application/octet-stream
Connection: keep-alive
x-amz-id-2: BfIpcuUEZt7Bgrj4ACs925mLsxriz2HvvE0Yv12r+xPHDbBe8iaa7cMjiZzriDTE
x-amz-request-id: 4AC37FB2031B2A67
Last-Modified: Tue, 04 Mar 2008 14:57:38 GMT
ETag: "2a4b378a42708c511d177e8b50ef9877"
Content-Range: bytes 0-102400/1485480
Content-Length: 102401
nnCoection: close

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
 99  100k   99   99k    0     0  15919      0  0:00:06  0:00:06 --:--:--     0

It quickly downloads 99K and then abruptly stops and hangs there until timeout.

More information about the nginx mailing list