У меня есть приложение Django, в котором я передаю медиафайлы через прокси-сервер nginx на s3.
Соответствующий код Python
response = HttpResponse()
response['X-Accel-Redirect'] = '/s3_redirect/%s' % filefield.url.replace('http://', '')
response['Content-Disposition'] = 'attachment; filename=%s' % filefield.name
return response
Блок nginx для внутреннего перенаправления:
location ~* ^/s3_redirect/(.*) {
internal;
set $full_url http://$1;
proxy_pass $full_url;
И запрос, зарегистрированный s3, есть.
REST.GET.OBJECT <media file> "GET <media file>" 400 InvalidArgument 354 - 4 -
"http://<referer>" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3)
AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1" -
Я, хоть убей, не могу понять, что случилось. URL, отправленный приложением на nginx, действителен, он работает в браузере. И nginx отправляет запрос на s3.
Я предполагаю, что проблема была в моем nginx conf. Требуется добавить еще конфигурацию. Следуя этому Сообщение блога помогло.
Добавил эти строки в мою конфигурацию nginx
proxy_http_version 1.1;
proxy_set_header Host $s3_bucket;
proxy_set_header Authorization '';
proxy_hide_header x-amz-id-2;
proxy_hide_header x-amz-request-id;
proxy_ignore_headers "Set-Cookie";
proxy_buffering off;
proxy_intercept_errors on;