Aktuell ist es nicht möglich, einem Bucket einen eigenen Domainnamen zuzuweisen. Wenn Sie für Ihren Bucket dennoch eine eigene Domain verwenden möchten, können Sie manuell eine Weiterleitung einrichten.
In diesem How-To wird erklärt, wie man einen CNAME-Record einrichtet. Da ein CNAME-Record aktuell nur funktioniert, wenn der Host-Header auf die Bucket-URL gesetzt ist, wird zusätzlich erklärt, wie Sie den Host-Header über die folgenden zwei Beispiel-Methoden anpassen können:
- Über Cloudflare mit einem Enterprise Plan
- Durch einen kurzen Code-Snippet am Anfang eines Python-Skripts, das Ihre Domain verwendet
Voraussetzungen:
- Eine eigene Domain
- Einen Bucket mit öffentlichen Daten
Am Ende dieses How-Tos sollten alle Anfragen an Ihre Domain direkt an den Bucket weitergeleitet werden.
-
DNS-Eintrag erstellen
Erstellen Sie einen neuen CNAME-Record. Die Domain muss auf den Hostnamen des Buckets zeigen.
TYPE Name Value CNAME example.com <bucket_name>.<region>.your-objectstorage.com
Beachten Sie, dass es mehrere Stunden dauern kann, bis die Änderung vollständig übernommen wurde.
-
Verbindung prüfen
Mit
nslookup
können Sie prüfen, ob die Änderung bereits übernommen wurde.nslookup example.com
Sobald die Domain umgeleitet wird, können Sie mit curl prüfen, ob Sie über Ihre Domain auf die Dateien in Ihrem Bucket zugreifen können. Beachten Sie, dass der Host-Header in der Anfrage auf die Domain des Buckets gesetzt sein muss. Zum Prüfen der Weiterleitung, können Sie den Host-Header in der curl-Anfrage festlegen. Da Server Name Indication (SNI) aktuell noch nicht auf den richtigen Hostnamen gesetzt ist, müssen Sie zusätzlich
--insecure
angeben.curl -H "Host: <bucket_name>.<region>.your-objectstorage.com" --insecure https://example.com/test.txt
-
Host-Header über Provider überschreiben
Manche Provider bieten die Möglichkeit, den Host-Header für eingehende Anfragen zu überschreiben.
Cloudflare bietet das zum Beispiel für Kunden mit einem Enterprise Plan an:
-
Wählen Sie Ihre Domain aus
-
Navigieren Sie über die linke Menüleiste zu "Regeln" » "Übersicht"
-
Wählen Sie
+ Regel erstellen
»Origin Rule
aus -
Bestimmen Sie, für welche eingehenden Anforderungen die Regel gelten soll
Feld Operator Wert Hostname gleich example.com -
Wählen Sie bei Hostheader die Option
Umschreiben in...
und geben Sie die Bucket-URL an
-
-
Host-Header und SNI im Skript überschreiben
Wenn Sie den Host-Header über Ihren Provider nicht setzen können und Sie die Domain in einem Skript verwenden, können Sie den Header alternativ am Anfang des Skripts festlegen.
Der Code muss folgende Werte enthalten:
GET-AnfrageClient sendet Anfrage an
CNAME zeigt auf und DNS liefert IP fürexample.com
<bucket_domain>
ClientSNI für TLS-Handshake setzenDefault
Setzen aufexample.com
<bucket_domain>
Host-Header in HTTP-Anfrage setzenDefault
Setzen auf
example.com
<bucket_domain>Server
Sendet Zertifikat für
Anfrage erhalten für
<bucket_domain>
<bucket_domain>
Überschreiben Beschreibung SNI SNI (Server Name Indication) gibt an, für welchen Hostnamen der Client ein SSL/TLS-Zertifikat erwartet und welches SSL/TLS-Zertifikat der Server entsprechend senden soll. Wenn der Server für den angeforderten Hostnamen kein Zertifikat besitzt, gibt er ein Standard-Zertifikat zurück. Wenn der Client ein anderes Zertifikat erhält als erwartet, schlägt die Zertifikatsprüfung fehl. Standardmäßig entspricht der SNI-Wert der ursprünglich angeforderten Domain. Da unsere Server kein SSL/TLS-Zertifikat für Ihre eigene Domain besitzen, müssen Sie SNI mit der tatsächlichen Bucket-Domain überschreiben. Host-Header Der Host-Header enthält die angeforderte Domain. Wenn ein Server eine Anfrage für eine Domain erhält, die er nicht hostet, wird diese verworfen. Im Host-Header wird automatisch Ihre eigene Domain angegeben, Sie können diesen Wert aber mit der eigentlichen Bucket-Domain überschreiben. Das folgende Beispiel verwendet
urllib3
(Dokumentation zu SNI).Ersetzen Sie
example.com
und<bucket_name>.<region>
mit Ihren eigenen Informationen.import urllib3 def fetch(url): if "example.com" in url: headers = {"Host": "<bucket_name>.<region>.your-objectstorage.com"} sni_hostname = "<bucket_name>.<region>.your-objectstorage.com" else: headers = {} sni_hostname = None parsed_url = urllib3.util.parse_url(url) http = urllib3.HTTPSConnectionPool(parsed_url.host, assert_hostname=sni_hostname) return http.request("GET", parsed_url.request_uri, headers=headers).data.decode() print(fetch("https://example.com/test.txt"))
Wenn Sie nun auf Ihre Domain zugreifen, sollte die Verbindung auf den Bucket weitergeleitet werden.