Wildcard Subdomain (* .example.com) mit Amazon Route53 DNS und S3

12

Ich hoste eine statische Website mit Amazon Route53 für DNS und S3 für HTML-Dateien. Es funktioniert gut.

Das aktuelle Setup ist:

example.com.  A   ALIAS s3-website-us-east-1.amazonaws.com. 
www.example.com. CNAME www.example.com.s3-website-us-east-1.amazonaws.com

(HINWEIS: example.com und www.example.com sind S3-Buckets. Meine HTML-Dateien befinden sich im example.com-Bucket.)

Jetzt möchte ich eine Wildcard-Subdomain wie diese hinzufügen - das habe ich versucht:

*.example.com. CNAME  www.example.com.s3-website-us-east-1.amazonaws.com

Die Idee ist, dass anything.example.com die Website korrekt auflöst. Das scheint aber nicht zu funktionieren. Wenn ich also zur Website gehe: joker.example.com, wird im Browser eine Fehlermeldung angezeigt:

Code: NoSuchBucket
Message: The specified bucket does not exist
BucketName: joker.example.com
Jaspis
quelle

Antworten:

10

Die @ edvinas.me Antwort ist richtig. Sie müssen eine Cloudfront-Distribution für Ihren Bucket erstellen.

Wenn Sie die Cloudfront-Distribution erstellen, setzen Sie die Option für alternative Domänennamen auf * .example.com.

Verwenden Sie dann die Cloudfront-URL wie d3lt3rsz2leycm.cloudfront.net.

Jetzt können Sie eine Wildcard-Subdomain wie folgt hinzufügen:

*.example.com. CNAME  3lt3rsz2leycm.cloudfront.net.    

Und sollte funktionieren.

Javier Arnáiz
quelle
1

Amazon S3 verwendet den Hostnamen, um den Bucketnamen zu bestimmen.

- http://docs.aws.amazon.com/AmazonS3/latest/dev/VirtualHosting.html

Der Hostname ist der Kleinbuchstabe des vom Browser im Host:Header gesendeten Werts . Es gibt keine Möglichkeit, einen Bucket so zu konfigurieren, dass er auf mehrere Hostnamen reagiert.

Es gibt einige Umwege, um dies zu erreichen, je nachdem, was Sie versuchen, aber es ist eine EC2-Instanz erforderlich, auf der HAProxy, Varnish, Apache oder ähnliches ausgeführt wird, um entweder auf Anfragen nach den Platzhalter-Hostnamen mit einer Umleitung zu antworten Schreiben Sie die Adressleiste des Browsers in den tatsächlichen Host- / Bucket-Namen oder verschieben Sie die Anforderungsheader und proxyen Sie die Anforderung an S3, was nicht so ineffizient ist, wie es sich anhört, da zwischen S3 und EC2 innerhalb derselben keine Datenübertragungsgebühren anfallen Region, und die Latenz ist gering.

Michael - sqlbot
quelle
1

Ihr S3-Bucket ist so konfiguriert, dass nur Anforderungen für example.com (und / oder www.example.com) akzeptiert werden. Sie können Ihren Bucket nicht so konfigurieren, dass er bestimmte Sub-Domains akzeptiert, die Sie aktivieren möchten.

Die einzige Möglichkeit, dies zu erreichen, ist die Verwendung eines externen Dienstes wie Cloudfront http://aws.amazon.com/cloudfront/, der die Anforderungen als Proxy bereitstellt .

Michaels (sqlbot) Antwort scheint dies genauer zu behandeln.

phoops
quelle
3
Wie das geht, ist die Frage selbst.
Jasper
Da die Konfiguration nicht unterstützt wird, müssen Sie dafür einen externen Dienst nutzen.
Phoops