On Monday 25 March 2013 13:21:28 Руслан Шарипов wrote: > Добрый день. > > Подскажите, поддерживает ли nginx возможность отдавать статические > файлы чанками? >
В этом нет практического смысла. Теоретически можно его заставить это делать через какой-нибудь обработчик, который сделает размер ответа неизвестным (например пропускать через SSI, sub filter, или addition filter). > Если запросить ресурс, который nginx будет проксировать, то > Transfer-Encoding: chunked включается. Например, запрашиваем ресурс, > который формируется wsgi-бэкендом: curl > http://server.example.com/api/v1/file/foobar/status, то ответ будет > таким: > > HTTP/1.1 200 OK > Server: nginx/1.2.1 > Date: Mon, 25 Mar 2013 09:09:08 GMT > Content-Type: application/json > Transfer-Encoding: chunked > Connection: close > > d > {"status": 0} > 0 > > Т.е. все хорошо, ответ пришел чанками. > Не всегда. Всё зависит от ресурса. Если размер ответа неизвестен, то будет использоваться chunked transfer encoding, при условии, что клиент его поддерживает. > Но если запросить ресурс, который представляет из себя просто > статичный файл и обрабатывается вот таким location'ом: > > location /files/ { > root /home/uploader/receiver; > chunked_transfer_encoding on; > } > > То имеем такую картину: > > Запрос: curl http://server.example.com/files/foobar > Ответ: > > HTTP/1.1 200 OK > Server: nginx/1.2.1 > Date: Mon, 25 Mar 2013 09:05:02 GMT > Content-Type: application/octet-stream > Content-Length: 819098 > Last-Modified: Mon, 25 Mar 2013 08:38:21 GMT > Connection: keep-alive > Accept-Ranges: bytes > > ...data > > Т.е. nginx отдает файл "спрошняком", не деля его на чанки. Можно ли > добиться того, чтобы nginx разбивал на чанки не только ответы от > бэкендов, но и статические файлы? (здесь же возникает вопрос, как > настаивать размер чанка) > > Спасибо. > > p.s. возможно задачу можно решить иначе, поэтому также поясню зачем > мне это надо. Если верить некому Бену > (https://groups.google.com/forum/?fromgroups=#!topic/python-tornado/kvZma1J > Y1hc), то штатный http-клиент из tornado позволяет использовать > streaming_callback > (http://www.tornadoweb.org/en/stable/httpclient.html) только в том > случае, если ответ от сервера не "сплошной", а разбит на чанки. > Некий Бен скорее всего неправ, и streaming_callback работает вне зависимости от chunked transfer encoding. Во всяком случае, никаких явных указаний на обратное я не нашел. И было очень бы странно, если бы он это требовал. -- Валентин Бартенев http://nginx.org/en/donation.html _______________________________________________ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru