Simulation von "Subdomains" ohne tatsächliche Domäne (in einem privaten Netzwerk)

391
S. T. Veje

Ich richte einen Server (Ubuntu Server 18.04) ein, auf dem Apache2 für meine persönlichen Test- und Entwicklungsanforderungen ausgeführt wird. Ich kann nur über die lokale IP-Adresse (z. B. http://10.0.0.125) oder den Namen im lokalen Netzwerk (z. B. http://jeeves) darauf zugreifen, aber das ist jetzt in Ordnung.

Ich wollte mehrere Subdomains auf diesem Server erstellen, um nicht zusammenhängende Sites ordnungsgemäß isoliert zu halten, aber ich glaube nicht, dass ich tatsächliche Subdomains verwenden kann: http://sub.10.0.0.125funktioniert nicht, da eine IP keine Domain ist und daher keine Subdomain haben kann http://sub.jeevesfunktioniert nicht, da der Browser .jeevesals TLD und nicht als Name des Servers interpretiert wird .

So kam ich zu einer anderen Lösung:

<VirtualHost *:80> ServerName localhost DocumentRoot /var/www/html AliasMatch "^/~(.*)" "/var/www/$1" </VirtualHost> 

Jetzt kann ich ein Verzeichnis erstellen /var/www/subund über http://jeeves/~sub/.

Ein sehr guter Kompromiss, dachte ich ... außer, da es keine Subdomain ist und nicht wie eine funktioniert, wird sich ein Link wie <a href="/foo/">verweisen http://jeeves/foo/und nicht wie gewünscht http://jeeves/~sub/foo/. Ich könnte damit im Code jeder Site umgehen, aber das wäre alles andere als ideal.

Meine Frage: Gibt es eine Möglichkeit, Apache dazu zu bringen, den /~sub/Teil der URL in jeder Hinsicht wie eine Subdomain zu behandeln (insbesondere Links)? Vielleicht eine Art BaseDir-Direktive? Ich konnte keinen finden, aber das bedeutet nicht, dass es so etwas nicht gibt.

Bevor Sie es vorschlagen: Eine tatsächliche Domäne für diesen Server zu erhalten, liegt etwas außerhalb der aktuellen Anforderungen. Der Betrieb eines dedizierten DNS-Servers scheint zu viel komplexer zu sein. Das Ändern der hosts-Datei auf jedem System ist nicht genau skalierbar (z. B. auf einem iPhone nicht trivial).

Ich habe das Gefühl, dass meine Lösung ideal für meine Bedürfnisse wäre, wenn sie nur funktionieren kann.

1
Sie müssen einen dedizierten DNS-Server einrichten, wenn Sie Unterstützung für Funktionen wie globale Domänen und Subdomänen wünschen. Wenn alles lokal ist, nehmen Sie die Änderungen in der Hostdatei vor. LPChip vor 5 Jahren 1

2 Antworten auf die Frage

1
grawity

ein link wie <a href="/foo/">wird sich beziehen http://jeeves/foo/und nicht wie gewünscht http://jeeves/~sub/foo/. […] Gibt es eine Möglichkeit, Apache dazu zu bringen, den / ~ sub / Teil der URL in jeder Hinsicht wie eine Unterdomäne zu behandeln (insbesondere Links)? Vielleicht eine Art BaseDir-Direktive?

Aber nicht der Apache kümmert sich hier um den Unterschied. Relative URLs wie diese /foo/werden von Ihrem Webbrowser aufgelöst, und der Webbrowser kann nicht über die Apache-Einstellungen konfiguriert werden. Solange die angegebene URL ein Pfad ist, der mit beginnt /, wird der Webbrowser sie immer als relativ zur Domänenbasis behandeln.

Der Betrieb eines dedizierten DNS-Servers scheint zu viel komplexer zu sein

Du bist wahrscheinlich auf einem dedizierten DNS - Server angewiesen jetzt um die zu lösen jeevesNamen - und es wahrscheinlich in Ihrem Home - Router ausgeführt wird, und der vollständige Name ist wahrscheinlich jevees.lan.oder jeeves.home.oder so ähnlich. (Clientgeräte lernen das Suffix über DHCP.)

Wenn Sie Glück haben, wird der Router können Sie benutzerdefinierten statischen Host - Namen hinzuzufügen, wie sub.lan., und wenn Sie sind sehr glücklich, könnte es sogar erlauben, Third-Level - Domains hinzuzufügen, wiesub.jeeves.lan.

Wenn der interne DNS-Server des Routers nicht flexibel genug ist oder die lokale Namensauflösung überhaupt nicht DNS-basiert ist, haben Sie meistens kein Glück. Führen Sie Ihren eigenen DNS aus.


Einige Leute haben Domänennamen eingerichtet, die auf magischen DNS-Servern gehostet werden, die <anything>.x.y.z.t.<somedomain>in die IP-Adresse übersetzt werden x.y.z.t. (Ich weiß nicht, welche spezifischen Domain-Namen derzeit existieren, aber xip.io war früher eine Sache.)

Ein potenzielles Problem bei dieser Problemumgehung - wie auch beim Kauf einer eigenen Domäne - besteht darin, dass die meisten Heimrouter DNS-Antworten, die von außen kommen, einfach blockieren und in eine "interne" IP-Adresse auflösen. (Dies wird als "DNS-Wiederherstellungsschutz" bezeichnet.)

Je mehr ich darüber nachdenke, desto offensichtlicher ist es, dass Sie recht haben. Meine Hoffnung war, dass Apache vielleicht so eingestellt werden könnte, dass jede Anfrage mit der richtigen "Subdomain" vorangestellt wird, möglicherweise basierend auf dem Referer: Wenn der Referer mit `/ ~ sub /` beginnt und die Anfrage nicht, wird Apache zu `umleiten / ~ sub / [angeforderte URL] `. Das war sowieso der vage Gedankengang, den ich hatte. S. T. Veje vor 5 Jahren 1
Sie könnten dies möglicherweise mit RewriteRule tun, aber ich sehe Wege, die durch fragile Referer brechen. Habe ich jemanden sagen hören "zu viel Komplexität"? grawity vor 5 Jahren 0
Touché. Auf der anderen Seite ist dies jedoch ein persönlicher Entwicklungsserver, kein Produktionsserver. Wenn also ein Referer nicht den Erwartungen entspricht, ist er wahrscheinlich meine eigene Schuld. S. T. Veje vor 5 Jahren 0
0
Kinnectus

Sie müssen einen dedizierten DNS-Server ausführen, der den angeforderten Domänennamen wieder in Ihre IP-Adresse für Testing / DevBox umwandeln kann.

Ich habe dies zuvor mit gemischten Ergebnissen ausprobiert, indem ich eine lokal installierte DNS-Lösung auf meiner Dev-Box verwendet habe.

Ich kaufte einen Business-Grade-Router mit NAT-Reflektion und der Fähigkeit, als DNS-Server zu fungieren, der es mir ermöglichte, meine Dev-Domänennamen einzugeben und sie auf meine DevBox-IP zu verweisen. dann habe ich Apache virtualhosts so konfiguriert, wie man es normalerweise tun würde, und ich kann sowohl TLD- als auch sub.TLD-Domänennamen verwenden.

Führen Sie Ihren eigenen DNS-Server aus. Es ist ein Lebensretter für einen Webentwickler.

Gibt es _Non-Software-basierte DNS-Lösungen? grawity vor 5 Jahren 0
Ich habe bearbeitet, um (hoffentlich) zu klären, was ich meine. Ich meine, ich habe eine Windows-basierte Software gefunden, die einen DNS-Server in meinem Entwicklungscomputer bereitgestellt hat. Dies stellte sich als ziemlich mies heraus und so verwendete ich einen Business-Router, der über die Funktionalität verfügt, und ich füge einfach die Domänen hinzu, die ich brauche, um ihn in meine Entwicklungsbox zurückzuverweisen. Funktioniert wesentlich besser. Kinnectus vor 5 Jahren 0
Ich denke, Sie könnten Router als "Hardwarelösung" bezeichnen, aber ich bin ein wenig überrascht, dass es tatsächlich gut funktioniert, wenn man bedenkt, dass die meisten Hersteller es als eine Tertiärfunktion behandeln, und zwar am besten._ (Schließlich hat es wirklich nichts mit Routing zu tun. ) Die meisten Domains werden auf normaler PC-Software gehostet, sei es PowerDNS oder BIND oder Windows DNS Service ... grawity vor 5 Jahren 0
Ich denke, es hängt davon ab, wie kompliziert man will, dass ihre DNS-Lösung ist ... Ein kleines LAN könnte ihren Router verwenden, eine dedizierte DNS-Box (wie Sie sagen, ein PC oder beispielsweise ein RPi) oder deren Business-Server, wenn dies der Fall ist Wählen Sie ... der Punkt ist, ich habe persönlich festgestellt, dass DNS außerhalb der Dev-Box viel einfacher gehandhabt wurde, als zu versuchen, auf einer Dev-Box alles richtig zum Laufen zu bringen. Mit einer dedizierten Box in meinem LAN habe ich außerdem den Luxus, meine Kreationen problemlos auf anderen LAN-Geräten wie Smartphones usw. testen zu können, ohne die Konfiguration der Geräte selbst zu ändern. Kinnectus vor 5 Jahren 0