proxy vs content-range

Bogun Dmitriy vugluskr на vugluskr.org.ua
Вт Дек 22 22:39:41 MSK 2009


В Втр, 22/12/2009 в 20:45 +0300, Sergey Shepelev пишет:

> >> Сегодня возникла одна проблема, которая поставила передо мной вопрос, как
> >> работает сохранение ответа backend'а в proxy_temp_path в случае наличия в
> >> запросе content-range.
> >>
> >> Моя проблема заключалась в том, что файлик размером в ~4gb стала тянуть
> >> качалка в ~10 потоков, что привело к очень большой нагрузке на FS и
> >> окончанию на ней места. Причем место занимали файлы уже удаленные с FS но
> >> еще не закрытые nginx'ом.
> >>
> >> Конфиг вхоста:
> >>
> >> server {
> >>     listen      1.1.1.1;
> >>
> >>     server_name .vhost.dom;
> >>
> >>     client_max_body_size 200m;
> >>
> >>     access_log  /var/log/nginx/vhost-access.log generic;
> >>     error_log   /var/log/nginx/vhost-error.log info;
> >>
> >>     root /srv/vhost.dom/www/htdocs;
> >>
> >>     location / {
> >>         proxy_pass         http://upstr_vhost;
> >>         proxy_set_header   Host             $host;
> >>         proxy_set_header   X-Real-IP        $remote_addr;
> >>         proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
> >>     }
> >> }
> >>
> >> На upstream'е обыкновенный apache, который отдавал файл с ФС. Настроить
> >> отдачу напрямую не всегда возможно, т.к. за содержимое вхоста "отвечает"
> >> другой человек...
> >>
> >> Направьте в сторону информации о работе модуля proxy при наличии заголовка
> >> content-range.
> >
> > proxy_buffering off;
> >
> > Смысл тогда держать nginx?
> 
> Смысл в том, что nginx не начинает на каждый запрос тяжелый OS поток,
> следовательно, может принять запросы от тысячи клиентов одновременно.
> Ещё мне лично синтаксис конфига нравится больше, чем у других веб
> серверов.

"Тяжелый OS поток"? В смысле - процесс? Для начала в *nix системе fork()
более-менее дешевая операция. Но в данном случае вопрос не в этом, а в
том куда nginx денет этот принятый запрос? Уж не передаст ли он его
куда-нибудь на backend для обработки, и не понадобится ли этому
backend'у создать "тяжелый OS поток" для обслуживания этого запроса?
Но по хорошему это не касается обсуждаемой темы.

> nginx проксирует запрос апачу, апач читает огроменный файл с диска
> используя какой-то буфер для чтения этого файла, в любом случае между
> диском и апачом существует как минимум один буфер, в который попадают
> данные. Вы добавляете ещё один. Вот теперь вы мне ответьте на тот же
> самый вопрос. Какой смысл держать nginx.

Апач не так "стар" как вам хочется, он прекрасно умеет использовать
sendfile. Но это опять не в тему.

> Если для вас смысл в nginx - добавить ещё одно звено буферизации
> статических файлов, тогда ещё proxy_cache надо включить и ещё squid
> поставить.

Смысл nginx'а для меня, возможность более быстрого обслуживания запросов
к динамическим страницам. Благодаря буферизации ответа backend'а на диск
или в буферы nginx'а с backend'а снимается необходимость простоя в
ожидании пока клиент заберет данные.

Но проблема, моя лично, заключается в том, что я не всегда могу
определить где будет статика а где динамика.
Еще раз говорю, знай я что по конкретному location'у будут многогиговые
статические файлы, апач бы никогда не получил туда запрос.

А вот теперь по теме:
Я лишь хочу выяснить и понять логику работы nginx модуля proxy при
облуживании запроса, у которого присутствует заголовок content-range,
чтобы иметь возможность его правильно настроить. О чем я собственно и
спросил в первом сообщении.

> > Если бы у меня была возможность разделить зоны вхостов на статические и
> > динамические я бы просто статику прописал в отдачу на прямую nginx'ом и эту
> > тему не поднимал бы.
> >
> > Меня больше интересыет логика работы nginx'а при проксировании запроса с
> > установленным content-range. Зная ее можно будет планировать обход подобных
> > проблемных мест.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://nginx.org/pipermail/nginx-ru/attachments/20091222/3a9f3ca5/attachment.html>


Подробная информация о списке рассылки nginx-ru