django-хранилища с использованием boto - не могут загружать mp3, но могут загружать изображения. Также страдает боль HTTP 307 - PullRequest
6 голосов
/ 03 февраля 2012

Я использую серверную часть boto (2.2.1) для django-хранилищ (1.1.4) для загрузки файлов в корзину S3.Он отлично работает с изображениями, но когда я пытаюсь загрузить файлы фильмов (маленький фильм, маленький файл avi) или mp3, я получаю сообщение о сломанной трубе.

Это странно.

Копаем вПри трассировке Django я вижу следующее исключение:

boto.https_connection.InvalidCertificateException

Какой вид подходит для того опыта, который я испытывал при использовании Cyberduck для прямой проверки корзины: иногда он жалуется, что я получаю несоответствие междусертификат для *.s3.amazonaws.com и домен *.s3-external-3.amazonaws.com

Действительно, ведение журнала показывает, что я получаю временное перенаправление HTTP 307.Возможно ли, что AWS отправляет некоторые типы контента в одну сторону, а другие - в другую, но boto / что-то не может идти в ногу с этим?Загрузки фильмов, кажется, ударяются в S3 дважды, тогда как изображения попадают в него один раз, поэтому вполне может быть, что boto справляется с штрафом 307 (а закрытые билеты для поддержки 307 в boto - пара лет), так что это можетну ладно, а что-то еще.

Но что?Я прошел от приятного рабочего дня до головокружительного, и это очень расстраивает.

Есть предложения о том, что может быть и / или что можно попытаться обойти?

(Обратите внимание, что это не удается с бэкэндом boto S3 или простым бэкэндом S3 - просто бото дает мне то, что выглядит как более конкретная ошибка)

1 Ответ

3 голосов
/ 05 октября 2012

Я пишу это как ответ, потому что это слишком долго, чтобы уместиться в комментарии.На самом деле он не отвечает на ваш вопрос, но, возможно, он поможет вам получить ответ.

Перенаправление 307, которое вы получаете, происходит потому, что ведро находится в eu-west-1, но вы используете стандартный s3Конечная точка .amazonaws.com.S3 использует некоторую магию DNS и перенаправления HTTP для маршрутизации трафика от общей конечной точки S3 к правильной региональной конечной точке.

Для достижения этого большинство клиентов S3 используют схему ссылок «поддомен», которая добавляет имя сегмента к имени хостав запросе.Таким образом, если вы пытаетесь получить доступ к своему сегменту, заголовок Host в запросе будет, по умолчанию в boto, выглядеть как foofoofoo-bar.s3.amazonaws.com, а затем, используя магию DNS и перенаправления HTTP, S3 в конечном итоге получит вашзапрос в нужное место.Это все должно происходить автоматически в boto.

Этот подход может вызвать проблему, если имя вашего сегмента содержит «.»потому что тогда заголовок Host может быть foofoofoo.bar.s3.amazonaws.com и, поскольку сертификат SSL с подстановочными знаками на конечной точке S3 подходит только для одного уровня поддоменов, период в имени сегмента приводит к сбою проверки сертификата SSL.

Вот почему я спросил о "."в имени вашего ведра, но, видимо, это не проблема.Есть ли в любом случае вы могли бы предоставить больше контекста из журналов?Я хотел бы увидеть, что происходит до ошибки проверки сертификата.

...