2009-02-20 3 views
12

Как изменить URL-адрес Amazon S3 от http://bucket.amazons3.com/imagepath.jpg к http://image.mydomain.com/imagepath.jpgAmazon S3 URL Rewrite

EDIT: В основном вся причина этого заключается в том, чтобы скрыть Amazon S3 URL из моих пользователей.

Я думал о HttpModule, который перенаправил бы запрос с изображения.mydomain.com на bucket.amazons3.com. Но это потребует, чтобы все запросы обрабатывались моими серверами, а затем перенаправлялись.

+1

Пожалуйста, отметьте как ответ, если вы мой ответ полезен. – Ramesh

ответ

22

Если я понимаю, вам нужно указать свое доменное имя вместо S3. Для этого вам нужно написать обработчик, который будет выступать в качестве прокси-сервера для сервера Amazon.

Но это фактически удвоит пропускную способность, так как вам нужно отправить изображение клиенту, а также получить изображение для S3.

Я не уверен, есть ли какой-либо S3-способ для этого.

Ниже Amazon S3 конкретный способ взят из Amazon S3, CNAME record

Средний пользователь может подписаться на Amazon S3 хостинг и начать загрузку файлов - принимая адрес по умолчанию структуру для размещенных файлов:

http://s3.amazonaws.com/your-bucket/some-file.txt Если вы планируете использовать S3 для размещения медиафайлов файлов - точнее, Flash-файлы - вы столкнетесь с политикой безопасности перекрестных доменов Adobe. Для исправления требуется , отображающее ваши размещенные файлы S3, чтобы посмотреть , как будто они обслуживаются от вашего собственного домена - виртуального хостинга. самый простой и привлекательный метод будет размещаемая URL файла, который нравится это:

http://s3.your-site.com/some-file.txt Для начала создайте ведром на S3 , что вы хотите, как корень для ваших размещенных файлов. Для этого примера, ваш S3 ведро будет:

s3.your-site.com Наиболее важным шагом является добавление соответствующего CNAME запись в настройках DNS.

Название Тип Данные s3.your-site.com CNAME s3.amazonaws.com. Ожидайте, что ваши новые настройки DNS будут принимать до 24-48 часов.

0

То, как я вижу, у вас есть два варианта:

  1. , чтобы сделать переадресацию, как вы заявили, или
  2. , чтобы сделать запросы на ресурсы от S3, а затем вернуть их в пользователей через ваш ответ.

Таким образом, если пользователь хочет видеть ресурс http://image.mydomain.com/imagepath.jpg, вы можете запросить внутри оригинальный ресурс из http://bucket.amazons3.com/imagepath.jpg, сохраните его локально и вернуть его запрашивающему пользователю.

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

3

Это звучит, как вы хотите создать истекающий ссылки,

http://www.ioncannon.net/s3/21/creating-s3-urls-that-expire-using-php/

Вы можете генерировать их на лету, и поставлять их в качестве перенаправления с помощью приложения. Так кто-то просит, http://images.mydomain.com/img123.jpg

и вы генерировать хороший, авто-истекающий s3 URL, http://mydomain.s3.amazonaws.com/T154456.jpg?AWSAccessKeyId=1ESOMESPECIALIDJJAKJ6RA82&Expires=1241372284&Signature=ddfr%2BlkoSEPAL%2BGbMwlMzj6q%2BCY%3D

затем перенаправлять пользователя на автоматически генерируемой URL. таким образом, даже если пользователь смотрит на источник html, они видят только URL-адрес , возвращающийся на ваш сайт, но когда они нажимают на ссылку, они перенаправляются на амазонку, поэтому вам не нужно беспокоиться о прокси-сервере . запросить через ваш сервер и съесть ненужную полосу пропускания.

3

если у вас есть контроль над DNS, почему бы не настроить CNAME?

У нас есть установка cname, указывающая js.our-domain.com, указывающая на один из наших кодеров (как ни странно, файлы javascript), тогда мы просто ссылаемся на js.our-domain.com/jquery.js (например) и прочь мы идем.

В зависимости от вашего хоста, Есть любое количество способов установки CNAME-х - Google поиск reveals many

6

Чтобы уточнить ответ Tez, в Amazon S3 обеспечивает поддержку для отображения пользовательских доменов через Virtual Hosting of Buckets.

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

Таким образом, используя в качестве примера в исходный вопрос, создавать S3 ведро под названием image.mydomain.com и создать CNAME для него:

image.mydomain.com CNAME image.mydomain.com.s3.amazonaws.com. 
9

Создание CNAME на s3.amazonaws.com. достаточный. Нет необходимости добавлять имя ковша.

4

Ответ Брайана правильный, и у Рамеша и Винсента есть ошибка. Установка CNAME на s3.amazonaws.com привела к ненужным перенаправлениям для меня, как это было предупреждено в руководстве AWS Virtual Hosting of Buckets here.

Смежные вопросы