ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: webdav в rest на nginx: upload, подз апрос, замена параметров запроса и ответа


  • To: Vasiliy Fedorov <nginx-ru@xxxxxxxxx>
  • Subject: Re: webdav в rest на nginx: upload, подз апрос, замена параметров запроса и ответа
  • From: Евгений Девятых <devyatyh@xxxxxxxxx>
  • Date: Mon, 4 Oct 2010 15:02:00 +0600
  • Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:date:from:x-mailer:x-priority :message-id:to:subject:in-reply-to:references:mime-version :content-type:content-transfer-encoding; bh=q6Q6pmzjPdgoLzsw9dTju/0M7d544W4JnVwlBwLPBzk=; b=kWrMvT6Gnr17q1aTJvOXK2k50rI2kBPsrH/L7WYm2VS5EfjJJjTSc6lKDdePD0qARA TW5NUaPYUVYforeSOW7rWkcXbb4+h82jdQRw+L5VkbHhKaz2aJg+CrHFL5+jrT9nGTDE 26ndpP22j5suMoAaDGG0ygJytpQNd4FPPpiUQ=
  • Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=date:from:x-mailer:x-priority:message-id:to:subject:in-reply-to :references:mime-version:content-type:content-transfer-encoding; b=ex1uCyII3PjuFHARAYZi5kDZ6tflfyCuRGTd7i74BS3f3s1QOMC5WAgFYHk7DiUu8U Yb1FQcgOue/l4Qj7HI3BGcBjtuYBSqsi0iVAsFUw+OqCUWeHfIkdYndR60BR4udMZpXe ovw87uBY59hZXIcRtFTzismPjW+ko+Vt5yQNE=
  • In-reply-to: <AANLkTi=W5BRK1u5SSxrE6hOzdL0=+z+VEdCbVJf2Vs9s@xxxxxxxxxxxxxx>
  • References: <AANLkTi=W5BRK1u5SSxrE6hOzdL0=+z+VEdCbVJf2Vs9s@xxxxxxxxxxxxxx>

Здравствуйте, Vasiliy.

Вы писали 4 октября 2010 г., 14:44:58:

> Привет.

> Есть задача по организации upload & download больших файлов (несколько
> Гб) авторизованных пользователей.
> Внешнее API, допустим, WebDAV. У бэкенда какое-то REST API и находятся
> они на разных машинах.
> Легкие запросы к WebDAV можно отдавать обрабатывать еще одному бэкенду
> (список файлов директории, свойства файлов, удаление файла) -- пусть к
> REST ходит сам, но запросы на upload и download файлов гонять через
> этот бэкенд не хочется, хочется напрямую отдавать в REST.

> Пытаюсь понять подходит ли Nginx для такой задачи, и что хочется чтобы
> умел proxy:
> 1. Прочитать заголовки запроса, не читая контент.
> 2. Сходить по какому-то URL с теми же заголовками, проверить что
> запрос пропустить можно, ответ на этот запрос можно выдать в любом
> устраивающем Nginx формате (чем сходить? у Nginx есть только SSI, но
> они включаются только в ответе (?))
> 3. Если нельзя -- ругнуться пользователю, если можно -- поменять
> request: method, uri, заголовки* -- и проксировать дальше.
> (Проксировать дальше не считывая весь контент запроса, как я понимаю,
> нельзя:
>   "Note that when using the HTTP Proxy Module (or even when using
> FastCGI), the entire client request will be buffered in nginx before
> being passed on to the backend proxied servers." (
> http://wiki.nginx.org/HttpProxyModule#Synopsis )
>  То есть upload больших файлов работать будет плохо.
> *: X-Accel-Redirect тут подходит плохо, хотя и используют для похожих
> вещей: http://kovyrin.net/2010/07/24/nginx-fu-x-accel-redirect-remote/

> То есть проблемы 3:
> 1. Upload всего файла.
> 2. Авторизация через другой сервер.
> 3. Замена параметров запроса в зависимости от подзапроса на лету.

> Идеи:
> 1. Непонятно почему "я не дожен хотеть" прямого проксирования запросов
> на upload, но у Lighttpd поведение такое же. То есть, казалось бы,
> логично прочитать заголовки запроса, разобраться с ними, записать в
> выходной сокет новые заголовки, вызвать splice (man splice).
> 2. Авторизация через другой сервер:
>     -- можно попробовать запрос направить на статический файлик с SSI
> инструкциями, первой инструкцией сходить авторизоваться, в зависимости
> от значения ответа вызывать разные SSI (не авторизован -- ошибка,
> авторизован -- вызвать url)
>        -- куда при этом денется контент запроса? отправится и в первый
> SSI и во второй? Или ни в один из SSI?
>        -- какими будут заголовки ответа? (Например, Content-Type для
> скачивания видео).
>     -- можно пробовать использовать embedded Perl, но он не умеет
> отправлять неблокирующие http-запросы. Embedded Lua, кстати, говорит
> что умеет ( http://github.com/chaoslawful/lua-nginx-module ) -- но
> модуль слишком новый, непонятно как с ним связываться.
> 3. Теоретически менять заголовки и метод можно, есть набор директив,
> но как соотнести с другими вариантами -- непонятно, разработчик
> lua-модуля пишет что изменять параметры запроса lua-модуль еще не
> умеет, хотя и хочет.

> Возможно ли то что хочется вообще сделать через Nginx? Какие-то еще
> есть варианты? Что-то другое, не Nginx, более приспособлено для
> решения таких задач?

> P.S.: Директива proxy_pass_request_body есть в документации на
> английском
> (http://wiki.nginx.org/HttpProxyModule#proxy_pass_request_body),
> нет в документации на русском
> (http://sysoev.ru/nginx/docs/http/ngx_http_proxy_module.html) и нет
> слов о ее отмене в changes (http://sysoev.ru/nginx/changes.html)
> _______________________________________________

Я вот тоже давно хочу прямое проксирование upload файлов на бэкэнд без
буферизации. Может кто патч накатает? :)

-- 
С уважением,
 Евгений                          mailto:devyatyh@xxxxxxxxx


_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://nginx.org/mailman/listinfo/nginx-ru


 




Copyright © Lexa Software, 1996-2009.