2009-02-20 13 views
12

Wie kann ich die Amazon S3-URL von http://bucket.amazons3.com/imagepath.jpg zu http://image.mydomain.com/imagepath.jpgAmazon S3 URL Rewrite

EDIT ändern: Grundsätzlich ist der ganze Grund dafür ist die Amazon S3-URL von meinem Benutzer zu verbergen.

Ich dachte über ein HttpModule nach, das die Anfrage von image.mydomain.com zu bucket.amazons3.com umleiten würde. Aber das würde erfordern, dass alle Anfragen zuerst von meinen Servern bearbeitet und dann weitergeleitet werden.

+1

Bitte als beantwortet markieren, wenn Sie meine Antwort nützlich sind. – Ramesh

Antwort

22

Wenn ich verstehe, müssen Sie Ihren Domänennamen anstelle von S3 angeben. Um dies zu tun, müssen Sie einen Handler schreiben, der als Proxy für den Amazon Server dient.

Aber das würde tatsächlich Ihre Bandbreite verdoppeln, wie Sie das Bild an den Client senden müssen und holen Sie das Bild für S3.

Ich bin mir nicht sicher, gibt es eine S3-spezifische Möglichkeit, damit umzugehen.

unten spezifische Weise Amazon S3 von Amazon S3, CNAME record

genommen Der durchschnittliche Benutzer für Hosting Amazon S3 anmelden kann und beginnen Hochladen von Dateien - der Standard-URL Struktur für gehostete Dateien akzeptieren:

http://s3.amazonaws.com/your-bucket/some-file.txt Wenn Sie vorhaben, S3 zu verwenden, um Medien Dateien zu hosten - genauer gesagt Flash-Dateien -, werden Sie in die domänenübergreifende Sicherheitsrichtlinie von Adobe einsteigen. Das Update erfordert Mapping Ihrer gehosteten S3-Dateien zu sehen , als ob sie von Ihre eigene Domäne - virtuelles Hosting serviert werden. Die einfachste und attraktivste Methode wäre eine gehostete Datei URL sein, die wie folgt aus:

http://s3.your-site.com/some-file.txt Um damit zu beginnen, einen Eimer auf S3 erstellen , die Sie für Ihre gehosteten Dateien als Root wollen. Für dieses Beispiel Ihres S3 Eimer wäre:

s3.your-site.com Der wichtigste Schritt den entsprechenden CNAME Datensatz zu DNS-Einstellungen erweitert.

Name Typ Daten s3.your-site.com CNAME s3.amazonaws.com. Erwarten Sie, dass Ihre neuen DNS-Einstellungen bis zu 24-48 Stunden dauern, um zu beheben.

0

Die Art, wie ich es sehe, haben Sie zwei Möglichkeiten:

  1. die Umleitungen zu machen, wie Sie erwähnen, oder
  2. ein Ersuchen um die Ressourcen von S3 zu machen und sie dann zurückkehren zu die Benutzer über Ihre Antwort.So

, wenn Benutzer die http://image.mydomain.com/imagepath.jpg Ressource, um zu sehen, Sie können intern fordern Sie die ursprüngliche Ressource von http://bucket.amazons3.com/imagepath.jpg, speichern Sie es lokal und senden es an den anfordernden Benutzer.

Es kostet viel Bandbreite, aber wenn dies Ihre kritische Anforderung ist, sollte dies der richtige Weg sein.

3

Es klingt wie Sie auslaufenden Links generieren wollen,

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

Diese können Sie dann im laufenden Betrieb, erzeugen und liefern, wie über Ihre Anwendung umleitet. So jemand fordert, http://images.mydomain.com/img123.jpg

und Sie erzeugen einen schönen, automatisch ablaufende s3 url, http://mydomain.s3.amazonaws.com/T154456.jpg?AWSAccessKeyId=1ESOMESPECIALIDJJAKJ6RA82&Expires=1241372284&Signature=ddfr%2BlkoSEPAL%2BGbMwlMzj6q%2BCY%3D

dann leiten Sie den Benutzer auf die automatisch generierte URL. Auf diese Weise, auch wenn der Benutzer auf die HTML-Quelle sieht sie nur die URL zurück zu Ihrer Website, aber wenn sie auf den Link klicken, werden sie nach Amazon weitergeleitet, so dass Sie sich keine Sorgen über Proxy- machen müssen Anfrage über Ihren Server und essen unnötig Bandbreite.

3

Wenn Sie die Kontrolle über Ihr DNS haben, warum nicht einen CNAME einrichten?

wir haben eine cname Setup zeigt js.our-domain.com zeigt auf einen unserer Eimer (seltsam genug JavaScript-Dateien) dann verweisen wir nur js.our-domain.com/jquery.js (zum Beispiel) und weg wir gehen.

Abhängig von Ihrem Host gibt es eine beliebige Anzahl von Möglichkeiten, um Setup CNAME ist - eine Google-Suche reveals many

6

auf Tez Antwort Um dies näher auszuführen, bietet Amazon S3 Unterstützung für die Zuordnung von benutzerdefinierten Domänen über Virtual Hosting of Buckets.

Damit dies funktioniert, muss der Name Ihres Buckets der vollständige Hostname sein, den Sie zuordnen möchten.

So, das Beispiel in der ursprünglichen Frage verwenden, erstellen Sie eine S3-Bucket image.mydomain.com und richten Sie einen CNAME für sie genannt:

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

einen CNAME Erstellen auf s3.amazonaws.com. ist ausreichend. Der Bucket-Name muss nicht vorangestellt werden.

4

Bryan's Antwort ist korrekt und Ramesh und Vincent haben einen Fehler. Das Setzen des CNAME auf s3.amazonaws.com führte zu unnötigen Weiterleitungen für mich, wie im AWS Virtual Hosting von Buckets Guide here gewarnt.