не работает flv при X-Accel-Redirect на location с proxy_pass Re: nginx и Amazon S3
Igor Sysoev
is at rambler-co.ru
Thu Nov 8 17:20:21 MSK 2007
On Thu, Nov 08, 2007 at 02:50:00PM +0200, Andrey Gerzhov wrote:
> Спасибо большое, решил по-вашему рецепту. Но поломался стриминг флешек,
> хотя даже get с докачкой работает.
>
> Схема следующая. nginx.conf:
> [---]
> location /stream/ {
> fastcgi_pass unix:/tmp/perl_cgi-dispatch.sock;
> }
> location /s3-pass/ {
> internal;
> flv;
> proxy_pass http://XXX.s3.amazonaws.com/;
> proxy_buffering off;
> }
> [---]
>
> unix:/tmp/perl_cgi-dispatch.sock возвращает строку:
>
> X-Accel-Redirect: /s3-pass/11900.flv?AWSAccessKeyId=KV0T6W8GJART3BJ82&Signature=UzUYx7luqwwPDEeFKKi%2FIdZQFO0%3D&Expires=1194462843
>
> или с параметром start= для оффсета по флешке
>
> X-Accel-Redirect: /s3-pass/11900.flv?AWSAccessKeyId=KV0T6W8GJART3BJ82&Signature=UzUYx7luqwwPDEeFKKi%2FIdZQFO0%3D&Expires=1194462843&start=2443192
>
> Скорее всего в данном случае не вызывается модуль flv или ему не
> передаётся параметр start= . nginx с flv точно собран.
>
> Если указать flv в location /stream/ , то выдаёт 404 потому как
> сразу пытается брать файлы по documentroot.
>
> Господа, как быть ?
nginx поддреживает flv только с диска. Это не фильтр.
> On Mon, Nov 05, 2007 at 08:58:57PM +0000, David Mzareulyan wrote:
> > Зависит от прочей архитектуры Вашего проекта. Во-первых, если контент не
> > секретный, то, как уже было сказано, ему ключи и не нужны. Если же контент
> > закрытый, то я, например, использую авторизацию по query-string. А именно:
> > перехватываю обращение, при помощи PHP формирую адрес типа
> > /s3-pass/bucket/file?AWSAccessKeyId=... (с нужными параметрами авторизации)
> > и делаю X-Accel-Redirect на него. А /s3-pass обрабатывается как:
> >
> > location /s3-pass/ {
> > internal;
> > proxy_set_header Authorization "";
> > proxy_pass http://s3.amazonaws.com/;
> > proxy_buffering off;
> > }
> >
> > proxy_set_header Authorization ""; -- потому что у меня самого на
> > сайте используется хедер "Authorization".
> >
> >
> >
> > >День добрый.
> > >
> > >Хочется поставить nginx фронтендом к Amazon S3 , чтобы стримить им
> > >флешки.
> > >
> > >Доступ к файлам на S3 можно получить через http get, но в
> > >http-запросе
> > >должен присутствовать header Authorization , который является
> > >"HMAC-SHA1 hash of your request using your AWS Secret Access Key.".
> > >Он уникальный для каждого запроса, его нужно сгенерировать, добавить и
> > >сделать proxy_pass и flv дальше.
> > >Пример создания запроса из Net::Amazon::S3 :
> > >
> > >[...]
> > >my $canonical_string
> > >= $self->_canonical_string( $method, $path, $headers );
> > >my $encoded_canonical
> > >= $self->_encode( $aws_secret_access_key, $canonical_string );
> > >$headers->header(
> > >Authorization => "AWS $aws_access_key_id:$encoded_canonical"
> > >);
> > >[...]
> > ># finds the hmac-sha1 hash of the canonical string and the aws secret
> > >access key and then
> > ># base64 encodes the result (optionally urlencoding after that).
> > >sub _encode {
> > >my ( $self, $aws_secret_access_key, $str, $urlencode ) = @_;
> > >my $hmac = Digest::HMAC_SHA1->new($aws_secret_access_key);
> > >$hmac->add($str);
> > >my $b64 = encode_base64( $hmac->digest, '' );
> > >if ($urlencode) {
> > >return $self->_urlencode($b64);
> > >} else {
> > >return $b64;
> > >}
> > >}
> > >[...]
> > >
> > >В какую сторону копать для решения этой задачи ?
> > >
> > >Если http_perl_module, то как ему передать все headers ?
> > >
> > >P.S.
> > >http://docs.amazonwebservices.com/AmazonS3/2006-03-01/gsg/reading-an-o
> > >bject.html
> > >
> >
> >
> > --
> > С уважением
> > Давид Мзареулян
> > david at hiero.ru
> >
> >
> >
>
> --
> Kittle
>
--
Игорь Сысоев
http://sysoev.ru
More information about the nginx-ru
mailing list