0

Ich habe eine komplexe Webanwendung auf example-app.com, die vollständig auf AWS mit ELB und Route 53 für DNS hostet. Es ist eine Rails App.Route 53 - Spezialdomäne für eine einzelne Seite auf dem vorhandenen Server

Ich führe ein Experiment aus, das ich in der App rails, bei example-app.com/test verwende. Ich möchte new-domain-app.com einrichten, auf example-app.com/test zeigen und die URL cloacked haben, um immer new-domain-app.com zu sein. Es handelt sich um eine einzelne Seite, daher sollte keine Navigation erforderlich sein.

Ich habe viel Mühe herauszufinden, wie ich meine DNS auf Route 53 einrichten, um dies zu erreichen. Hat jemand gute Ideen, wie diese Route 53-Konfiguration aussehen soll?

Antwort

1

AWS bietet eine sehr einfache Möglichkeit, dies zu realisieren - mit Cloudfront. Vergessen Sie die Tatsache, dass es als CDN vermarktet wird. Es ist auch ein Reverse-Proxy, der dem Pfad einen festen Wert voranstellen kann und einen anderen Host-Namen an den Back-End-Server sendet als den, der in den Browser eingegeben wurde. Das klingt wie das, was Sie brauchen.

  • Erstellen Sie eine CloudFront-Webdistribution.

  • Konfigurieren Sie den neuen Domänennamen als alternativen Domänennamen für die Verteilung.

  • Geben Sie für den Ursprungsserver Ihren vorhandenen Hostnamen ein.

  • Für die origin path, setzen /test - oder was auch immer Zeichenfolge, die Präfix auf dem Pfad vom Browser gesendet werden soll.

  • Konfigurieren Sie das Cache-Verhalten nach Bedarf - aktivieren Sie ggf. die Weiterleitung der Abfragezeichenfolge oder der Cookies und alle Header, die Ihre App sehen möchte, aber nicht Host.

  • Zeigen Sie Ihren neuen Domainnamen auf CloudFront ... Bevor Sie das tun, beachten Sie, dass Ihre CloudFront-Distribution einen Hostnamen namens dxxxexample.cloudfront.net hat. Nachdem die Verteilung abgeschlossen ist (der Status "In Bearbeitung" verschwindet normalerweise innerhalb von 5 bis 20 Minuten), sollte Ihre Site unter dem Hostnamen cloudfront.net erreichbar sein.

Wie das funktioniert: Wenn Sie http://example.com in den Browser eingeben, Cloudfront den Ursprung Pfad auf den Pfad sendet der Browser GET /test/ HTTP/1.1, so GET/HTTP/1.1 wird hinzufügen. Diese Konfiguration setzt den Pfad jeder Anfrage mit der Zeichenfolge, die Sie als Ursprungspfad angegeben haben, voran und sendet sie an den Server. Die Adresszeile des Browsers ändert sich nicht, da dies keine Umleitung ist. Der Host-Header, der vom Browser gesendet wird, wird durch den Hostnamen des Ursprungsservers ersetzt, wenn die Anforderung an den Ursprung gesendet wird.

0

DNS kennt Domänen, nicht URLs. DNS konvertiert einfach Namen in IP-Adressen.

Sie können nicht tun, was Sie verlangen, nur mit DNS und ELB, was Sie jedoch tun können, ist eine separate VHOST für new-domain-app.com, die auf Ihre example-app.com Website zeigt und erfüllt mit einer Art Umleitungsregel, die nur für new-domain-app.com ausgelöst wird, was Sie wollen.

Ich bin mir nicht sicher, dass dies als eine SO-Frage qualifiziert, und wahrscheinlicher ist eine Serverfault-Frage. Spezifische Informationen zu Ihrem Webserver und Ihrer Betriebssystemplattform wären hilfreich, um spezifischere Ratschläge zu erhalten.

hier also einige Details:

  1. Sie haben bereits example-app.com Aufbau und Arbeits
  2. Sie erstellen einen Eintrag CNAME zeigt new-domain-app.com zu example-app.com oder Sie kann einen A-Eintrag machen, der auf dieselbe IP verweist. Wenn Sie bereits example-app.com auf eine andere IP-Adresse verweisen, verwenden Sie eine Subdomain (test.example-app.com), um sie zu isolieren.
  3. Richten Sie einen neuen vhost auf Ihrem Server ein, der den bestehenden vhost für new-domain-app.com grundsätzlich dupliziert. Das einzige, was Sie ändern müssen, ist die Konfiguration des Servernamens.

Warum funktioniert das? Weil HTTP 1.1 den HOST-Header enthält, den Browser mitschicken, und Web-Server in vhosting verwenden, um zu bestimmen, an welchen virtuellen Host eine eingehende Anfrage weitergeleitet werden soll. Wenn es sieht, dass der Client-Browser "example-app.com" wollte, leitet es die Anfrage an den entsprechenden vhost.

Anstatt etwas Phantasie Proxying, die sicherlich verwendet werden kann, um zu einem ähnlichen Ergebnis zu kommen, können Sie nur eine Umleitungsregel, die nach Anfragen für den Host example-app.com sucht und leitet diese an Beispiel- app.com. In Apache, die mod_rewrite verwendet, die Leute oft verwenden, indem sie Regeln in die allgegenwärtige .htacess Datei setzen, aber kann auch in nginx und anderen gängigen Webservern gemacht werden. Die Einzelheiten sind für jeden etwas unterschiedlich.

+0

Interessant, und das würde die Domain bei new-domain-app.com getaktet halten? Ich dachte über SO und Serverfault nach, entschied mich aber dafür, hier zu posten, da das route-53-Tag populär war, und ich denke, dass die endgültige Antwort eine Konfiguration der Schienen erfordern könnte. –

+0

Ich bin mir nicht sicher, was Sie mit getarnt meinen. Sobald Sie einen Eintrag in DNS eingeben, ist es für alle sichtbar. Es gibt kein geheimes DNS, das nicht innerhalb des privaten Netzwerkraums existiert (VPNs, nicht routbare IPs und dergleichen). – gview

+1

@Gview Cloaking ist eine abscheuliche Taktik mit Iframes oder JavaScript oder ähnliche Schädling, so dass die Adressleiste des Browsers zeigt die Adresse, die Sie eingegeben haben, während der Inhalt tatsächlich von woanders kommt. Viele Registrare, die kostenloses DNS-Hosting einwerfen, haben auch Webserver, die für Kunden konfiguriert sind, so dass sie den Eindruck erwecken, dass es Teil von DNS ist. Ich denke, Domain masking ist ein anderes Wort. Allgegenwärtige schreckliche Idee, aber möglich mit einem statischen Webserver, um die HTML-Seite, die den Hack implementiert, zurückgeben. –

1

Was Sie versuchen, ist nicht möglich. Route53 ist ein DNS-System, und Sie können einen Hostnamen (z. B. new-domain-app.com) nicht so konfigurieren, dass er mit DNS auf URL verweist (z. B. http://example-app.com/test).

Sie verwenden jedoch wahrscheinlich ein falsches Tool für den Job. Wenn example-app.com/test tatsächlich eine einfache, statische Seite mit einer einzelnen Seite ist, müssen Sie sie nicht in der Rails-App hosten. Stattdessen können Sie es im AWS S3-Bucket hosten, und dann können Sie mithilfe von Route53 auf diesen Bucket mit dem Wert new-domain-app.com zeigen.

Siehe die folgenden Details:

+0

Nun, es ist ein bisschen schwierig, denn obwohl es eine einzelne Seite ist, ist es nicht statisch. Ich muss mich mit meiner Produktionsdatenbank in der Hauptdomain verbinden, um Inhalte beim Laden abzurufen, und auch um einige Ajax-Aufrufe zu machen. –

+1

In diesem Fall ist es wesentlich schwieriger. Sie müssten einen Proxy-Server (z.Nginx), um URL-Anfragen von "http: // new-domain-app.com" nach "http: // beispiel-app.com/test" umzuschreiben und zu übernehmen. Ich habe es in der Vergangenheit getan, und es dauerte immer länger als erwartet. – quarterdome