Eigene Domain mit CNAME

Last change on 2025-03-17 • Created on 2025-03-17 • ID: ST-F555E

Aktuell ist es nicht möglich, einem Bucket einen eigenen Domainnamen zuzuweisen. Wenn du für deinen Bucket dennoch eine eigene Domain verwenden möchtest, kannst du 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 du den Host-Header über die folgenden zwei Beispiel-Methoden anpassen kannst:

  • Über Cloudflare mit einem Enterprise Plan
  • Durch einen kurzen Code-Snippet am Anfang eines Python-Skripts, das deine Domain verwendet

Voraussetzungen:

  • Eine eigene Domain
  • Einen Bucket mit öffentlichen Daten

Wenn du am Ende deine Domain aufrufst, sollten alle Anfragen direkt an deinen Bucket weitergeleitet werden.


  1. DNS-Eintrag erstellen

    Erstelle 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

    Beachte, dass es mehrere Stunden dauern kann, bis die Änderung vollständig übernommen wurde.


  1. Verbindung prüfen

    Mit nslookup kannst du prüfen, ob die Änderung bereits übernommen wurde.

    nslookup example.com

    Sobald die Domain umgeleitet wird, kannst du mit curl prüfen, ob du über deine Domain auf die Dateien in deinem Bucket zugreifen kannst. Beachte, dass der Host-Header in der Anfrage auf die Domain des Buckets gesetzt sein muss. Zum Prüfen der Weiterleitung kannst du den Host-Header in der curl-Anfrage festlegen. Da Server Name Indication (SNI) aktuell noch nicht auf den richtigen Hostnamen gesetzt ist, musst du zusätzlich --insecure angeben.

    curl -H "Host: <bucket_name>.<region>.your-objectstorage.com" --insecure https://example.com/test.txt

  1. 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ähle deine Domain aus

  • Navigiere über die linke Menüleiste zu "Regeln" » "Übersicht"

  • Wähle + Regel erstellen » Origin Rule aus

  • Bestimme, für welche eingehenden Anforderungen die Regel gelten soll

    Feld Operator Wert
    Hostname gleich example.com
    • Wähle bei Hostheader die Option Umschreiben in... und gib die Bucket-URL an

      cloudflare cname header de


  1. Host-Header und SNI im Skript überschreiben

    Wenn du den Host-Header über deinen Provider nicht setzen kannst und du die Domain in einem Skript verwendest, kannst du den Header alternativ am Anfang des Skripts festlegen.

    Der Code muss folgende Werte enthalten:

    GET-Anfrage
    Client sendet Anfrage an
    CNAME zeigt auf und DNS liefert IP für
    example.com
    <bucket_domain>

    Client
    SNI für TLS-Handshake setzen
    Default
    Setzen auf
    example.com
    <bucket_domain>


    Host-Header in HTTP-Anfrage setzen
    Default
    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 deine eigene Domain besitzen, musst du 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 deine eigene Domain angegeben, du kannst diesen Wert aber mit der eigentlichen Bucket-Domain überschreiben.

    Das folgende Beispiel verwendet urllib3 (Dokumentation zu SNI).

    Ersetze example.com und <bucket_name>.<region> mit deinen 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 du auf deine Domain zugreifst, sollte die Verbindung auf den Bucket weitergeleitet werden.