Lokale Subdomänen für eine eigenständige Anwendung

9

Ich habe eine Website, die aus drei kleineren "unabhängigen" Unterwebsites besteht:

  • Mysite
    • index.html
    • favicons
    • Bilder
    • doc
      • index.html
      • css
      • img
      • js
      • ...
    • Editor
      • index.html
      • Bilder
      • js
      • src
      • ...

Wo doc eine Website ist, die mit Hugo :: Eine schnelle und moderne statische Website-Suchmaschine erstellt wurde, ist editor die mxgraph Graphditor-Beispiel ; und die verbleibenden Dateien machen eine handgemachte Landing Page.

Neben der Bereitstellung auf einem Webserver möchte ich die Website als eigenständige Anwendung verteilen. Um dies zu erlauben, schrieb ich diesen wirklich einfachen Server in go:

%Vor%

Als Ergebnis kann ich simpleserver -d <path-to-mysite> ausführen und die Websites durch localhost , localhost/doc und localhost/editor durchsuchen.

Dann möchte ich benutzerdefinierte (Sub-) Domain (s) wie mylocal.app , doc.mylocal.app und editor.mylocal.app verwenden. Also habe ich die folgende Zeile zu meiner /etc/hosts -Datei hinzugefügt: 127.0.0.1 mylocal.app . Daher kann ich mylocal.app , mylocal.app/editor und mylocal.app/doc durchsuchen. Außerdem konnte ich es mit verschiedenen Paketen in mylocal.app , mylocal.app:<editor-port> und mylocal.app:<doc-port> ändern.

Wenn ich jedoch versuche, eine Subdomain zu verwenden, wird sie nicht ordnungsgemäß aufgelöst, sodass eine Reverse-Proxy-Strategie nicht funktioniert. Da Platzhalter nicht unterstützt werden, kann ich zusätzliche Einträge in der /etc/hosts -Datei hinzufügen, aber ich würde es lieber vermeiden.

Obwohl eine alternative Lösung darin besteht, dnsmasq auszuführen, möchte ich die Anwendung als Standalone-Version beibehalten. Ich habe gleichwertige Golang-Pakete gefunden. Ich habe jedoch das Gefühl, dass viele Funktionen unterstützt werden, die ich nicht wirklich brauche.

Außerdem, da ich keine IP wirklich lösen muss, aber einen Alias ​​von localhost , denke ich, dass ein Proxy ausreichen könnte. Dies wäre auch einfacher zu konfigurieren, da der Benutzer nur den Browser konfigurieren könnte und keine systemweite Änderung erforderlich wäre.

Der gesamte Datenverkehr des Nutzers wird jedoch von meiner App "gefiltert". Ist das richtig? Wenn ja, können Sie mich auf jeden Hinweis verweisen, um es auf die sauberste Weise zu implementieren. Ich weiß, das ist ziemlich subjektiv, aber ich meine ein relativ kurzes (sagen wir 10 Zeilen Code) Snippet, so dass Benutzer leicht überprüfen können, was vor sich geht.

BEARBEITEN

Ich möchte etwas wie:

verwenden %Vor%

oder

%Vor%

Dies sind nur Schnipsel. Ein vollständiges Beispiel ist dies , auf das in den Kommentaren von @ Steve101 verwiesen wurde.

Allerdings weiß ich momentan nicht, was systemDefaultHandler ist. Und das ist dort nicht gelöst.

Abgesehen davon schlug @faraz vor, goproxy zu verwenden. Ich denke, dass HTTP/HTTPS transparent proxy der Standard-Handler ist, nach dem ich suche. Aber mit einem Paket nur zu tun, scheint mir übertrieben. Kann ich die gleiche Funktionalität mit integrierten Ressourcen erreichen?

    
U.Martinez-Corral 11.03.2017, 02:18
quelle

2 Antworten

4

Leider gibt es keinen einfachen Weg, dies über Go zu tun. Sie müssen die DNS-Anfragen Ihres Systems genau wie dnsmasq abfangen, und das erfordert zwangsläufig einige Änderungen an der DNS-Konfiguration des Systems ( /etc/resolv.conf in Linux, /etc/resolver auf einem Mac oder Firewall-Regel), um Ihre DNS-Anfragen zu routen deine App Der DNS-Server hat den Nachteil, dass Sie einen DNS-Server in Ihrer App erstellen müssen, der pow.cx ähnlich ist scheint unnötig kompliziert.

Da das Mucken mit der Systemkonfiguration unvermeidlich ist, würde ich dafür stimmen, Änderungen an der hosts-Datei beim Booten vorzunehmen oder wenn ein Verzeichnis hinzugefügt / entfernt wird (über fsnotify .) Beim Herunterfahren können Sie auch die hinzugefügten Einträge löschen.

Wenn Sie diese Änderungen für einen bestimmten Browser isolieren möchten, anstatt eine systemweite Änderung vorzunehmen, können Sie Ihre Anwendung immer über einen Proxy-Server wie goproxy und weisen Sie Ihren Browser an, diesen Proxy für Anfragen zu verwenden. Beispielsweise können Sie dies in Chrome über seine Einstellungen oder durch Festlegen des --proxy-server -Flags tun:

%Vor%

Weitere Informationen finden Sie in den Chrome-Dokumenten zu Netzwerkeinstellungen .

Wenn Sie mit Browserkonfigurationen auch viel zu tun haben, können Sie einfach verwenden eine Erweiterung , um die Anfragen nach Bedarf zu bearbeiten.

    
fny 14.03.2017 22:37
quelle
0

Es gibt nur eine Lösung, die ohne Proxy funktionieren würde, dass Sie eine Domain dafür registrieren und einen offiziellen DNS-Eintrag mit Platzhalter zu 127.0.0.1 wie * .myApp.suche.org machen. Also jeder Client, der die IP auflöst, bekommt 127.0.0.1 und arbeitet lokal. Auf diese Weise benötigen Sie keine Administratorrechte, um die Datei / etc / hosts oder Ähnliches zu ändern. Wenn es hinter Proxy arbeiten sollte, ohne den Resolver (etc / hosts etc) zu modifizieren, können Sie eine wpad.dat (Javascript für Proxy detection) angeben, die für Ihre Domain sagt, dass der gesamte Datenverkehr Sie Server und den Rest an den realen Proxy. Wenn dies auf Ihrem Server ausgeführt wird, kann das Skript automatisch den echten Proxy als Standard enthalten.

    
SkateScout 20.03.2017 17:39
quelle

Tags und Links