ПРОЕКТЫ 


  АРХИВ 


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: nginx и Amazon S3



Зависит от прочей архитектуры Вашего проекта. Во-первых, если контент не секретный, то, как уже было сказано, ему ключи и не нужны. Если же контент закрытый, то я, например, использую авторизацию по 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@xxxxxxxx






 




Copyright © Lexa Software, 1996-2009.