2009-02-20 27 views
12

Come posso cambiare l'URL da Amazon S3 http://bucket.amazons3.com/imagepath.jpg a http://image.mydomain.com/imagepath.jpgAmazon S3 URL Rewrite

EDIT: Fondamentalmente tutta la ragione di questo è di nascondere l'Amazon S3 url dai miei utenti.

Stavo pensando a un HttpModule che reindirizza la richiesta da image.mydomain.com a bucket.amazons3.com. Ma ciò richiederebbe che tutte le richieste vengano gestite dai miei server prima di essere poi inoltrate.

+1

Si prega di contrassegnare come risposta se la mia risposta utile. – Ramesh

risposta

22

Se ho capito, è necessario specificare il nome del dominio invece di S3. Per fare ciò, è necessario scrivere un gestore che fungerà da proxy per il server Amazon.

Tuttavia, questo in realtà raddoppierà la larghezza di banda in quanto è necessario inviare l'immagine al client e recuperare l'immagine per S3.

Non sono sicuro che ci sia un modo specifico S3 per gestirlo.

Qui di seguito è il modo specifico Amazon S3 tratto da Amazon S3, CNAME record

L'utente medio può firmare per Amazon S3 hosting e cominciare a caricare file - accettando l'URL predefinito struttura per i file ospitati:

http://s3.amazonaws.com/your-bucket/some-file.txt Se si prevede di utilizzare S3 per ospitare file multimediali - in particolare i file Flash - si eseguirà il criterio di sicurezza tra domini di Adobe. La correzione richiede mappare i file S3 ospitati per guardare come se fossero serviti da il proprio dominio - hosting virtuale. Il più semplice e più attraente metodo sarebbe un URL di file hosting che piace questo:

http://s3.your-site.com/some-file.txt Per iniziare, creare un secchio su S3 che si desidera come root per i tuoi file ospitati. In questo esempio, il tuo S3 secchio sarebbe:

s3.your-site.com La più importante passo è l'aggiunta del record CNAME opportuno le impostazioni DNS.

Nome Tipo Dati s3.your-site.com CNAME s3.amazonaws.com. Aspettatevi le vostre nuove impostazioni DNS per prendere fino a 24-48 ore per risolvere.

0

Il mio modo di vedere, si hanno due scelte:

  1. per rendere i reindirizzamenti, come si è detto, o
  2. di fare una richiesta di risorse da S3 e poi a restituirli a gli utenti tramite la tua risposta.

Quindi, se l'utente vuole vedere la risorsa http://image.mydomain.com/imagepath.jpg, è possibile richiedere internamente la risorsa originale http://bucket.amazons3.com/imagepath.jpg, salvarlo localmente e restituirlo all'utente richiedente.

Passa molta larghezza di banda, ma se questo è il tuo requisito fondamentale, questa dovrebbe essere la strada da percorrere.

3

Sembra che si desidera generare i collegamenti in scadenza,

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

si può quindi generare questi al volo, e fornire loro come reindirizza tramite l'applicazione. Così qualcuno richiede, http://images.mydomain.com/img123.jpg

e si genera un bello, auto-scadenza s3 url, http://mydomain.s3.amazonaws.com/T154456.jpg?AWSAccessKeyId=1ESOMESPECIALIDJJAKJ6RA82&Expires=1241372284&Signature=ddfr%2BlkoSEPAL%2BGbMwlMzj6q%2BCY%3D

poi reindirizzare l'utente all'URL generato automaticamente. in questo modo, anche se l'utente guarda la sorgente HTML, vede solo l'url che riporta al tuo sito, ma quando fa clic sul link, viene reindirizzato ad Amazon quindi non devi preoccuparti di proxy-ing richiesta tramite il tuo server e consumando la larghezza di banda non necessaria.

3

se hai il controllo del tuo DNS perché non impostare un CNAME?

abbiamo un setup cname che indica js.our-domain.com che punta a uno dei nostri bucket (file javascript abbastanza stranamente) quindi facciamo riferimento a js.our-domain.com/jquery.js (ad esempio) e via andiamo.

A seconda del vostro padrone di casa, ci sono molti modi per impostare CNAME di - una ricerca su Google reveals many

6

di approfondire la risposta di Tez, Amazon S3 fornisce il supporto per i domini personalizzati tramite la mappatura Virtual Hosting of Buckets.

Per fare in modo che funzioni, il nome del bucket deve essere il nome host completo che si desidera mappare.

Quindi, utilizzando l'esempio nella domanda iniziale, creare un secchio S3 chiamato image.mydomain.com e impostare un CNAME per esso:

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

Creazione di un CNAME sul s3.amazonaws.com. è sufficiente. Non è necessario anteporre il nome del bucket.

4

La risposta di Bryan è corretta e Ramesh e Vincent hanno un errore. L'impostazione di CNAME su s3.amazonaws.com ha comportato reindirizzamenti non necessari, come indicato nella guida di AWS Virtual Hosting of Buckets here.