Alle Entwickler gehen unbewusst davon aus, dass localhost 127.0.0.1 entspricht, so selbstverständlich wie 1+1=2. Ähnlich wie Mathematiker versuchen zu beweisen, warum 1+1 2 ergibt, bin ich heute plötzlich neugierig auf diesen Zusammenhang geworden. Daher habe ich dieses Prinzip untersucht und dabei die Kommunikationsmechanismen von Linux neu verstanden. Dies hat mir die logische Strenge der Entwickler hinter diesen Mechanismen nähergebracht, und ich konnte im Prozess des Verstehens nur staunen. Im Folgenden finden Sie die Informationen, die ich auf dieser Reise gesammelt habe.
1. Wie wird localhost mit 127.0.0.1 verknüpft?
Frage: Warum verbindet ein Aufruf von localhost mit 127.0.0.1?
Antwort: Ein Linux-System wandelt bei der Generierung einer Netzwerk-Anfrage den Domainnamen in eine IP-Adresse um. Dabei wird zuerst die Datei /etc/hosts überprüft. Standardmäßig enthält die Datei /etc/hosts folgende Einstellungen:
127.0.0.1 localhost
Hier verweist 127.0.0.1 auf die Loopback-Schnittstelle, die sich selbst repräsentiert. Wenn man daher http://localhost im Browser oder Terminal aufruft, leitet Linux diese Anfrage direkt an 127.0.0.1 weiter, ohne den Umweg über DNS zu nehmen. Folglich fungiert der Name localhost intern unter Linux als Alias (Spitzname) für sich selbst.
2. Was ist die Datei /etc/hosts und welche Rolle spielt sie?
Frage: Wie funktioniert die /etc/hosts Datei genau?
Antwort: Die /etc/hosts Datei ist eines der grundlegenden Mechanismen im Hostname-Resolving-Prozess von Linux. Wenn eine Netzwerkanfrage generiert wird, wandelt Linux den Domainnamen in eine IP-Adresse in der folgenden Reihenfolge um:
- Überprüfung der Datei
/etc/hosts: Die Funktiongetaddrinfo(), bereitgestellt von derglibc-Bibliothek unter Linux, ist der Ausgangspunkt für alle Netzwerkanfragen. Diese Funktion überprüft zunächst die Datei/etc/hosts, wenn sie die IP-Adresse eines Domainnamens auflöst. Ist der Domainname in/etc/hostsdefiniert, gibt Linux diese Information zurück, ohne den DNS-Server zu kontaktieren. - Anfrage an den DNS-Server: Wenn der Domainname nicht in der Datei
/etc/hostsdefiniert ist, wird die IP-Adresse über den konfigurierten DNS-Server abgefragt.
Die Datei /etc/hosts wirkt auf alle Netzwerkanfragen und funktioniert somit auch in den Netzwerkanfragen-Bibliotheken von Browsern, curl, ping und dem requests-Modul in Python.
3. Was ist möglich, wenn man die Datei /etc/hosts nutzt?
Frage: Welche Auswirkungen hat es, wenn man einen Domainnamen zur /etc/hosts Datei hinzufügt?
Antwort: Wenn man einen gewünschten Domainnamen und die zugehörige IP-Adresse in die /etc/hosts Datei hinzufügt, wird diese Domain direkt mit der festgelegten IP verbunden, ohne den DNS zu verwenden. Zum Beispiel:
127.0.0.1 localhost
127.0.0.1 app1.local
127.0.0.1 app2.local
Mit dieser Einstellung:
- Wenn Anfragen an
app1.localoderapp2.localgestellt werden, leitet Linux diese an 127.0.0.1 weiter. - Es ist nützlich, um in der Entwicklungsumgebung virtuelle Domain-Tests oder interne Kommunikation zwischen Anwendungen einzurichten.
- Die angefragte Domain hat die gleiche Wirkung wie
localhost, ermöglicht jedoch die unabhängige Behandlung jeder einzelnen Domain.
4. Wie arbeiten Nginx und Gunicorn mit der Datei /etc/hosts zusammen?
Frage: Können Server wie Nginx und Gunicorn mit der /etc/hosts Datei interagieren?
Antwort: Da Webserver wie Nginx auf der Linux-Netzwerkschicht arbeiten, befolgen sie die in /etc/hosts festgelegten Domains. Zum Beispiel:
- Wenn in der Datei
/etc/hosts127.0.0.1 app1.localfestgelegt ist, leitetNginxdiese Domainanfragen an die Anwendung weiter, die mit127.0.0.1verbunden ist. - Man kann in
Nginxvirtuelle Hosts einrichten, um die Anfragen domänenbasiert zu trennen. Beispiel:
server {
server_name app1.local;
location / {
proxy_pass http://127.0.0.1:8000; # app1 service
}
}
server {
server_name app2.local;
location / {
proxy_pass http://127.0.0.1:8001; # app2 service
}
}
Diese Konfiguration ermöglicht es, zwei Anwendungen unabhängig auf demselben Server zu betreiben.
5. Wie ist die Datei /etc/hosts in Entwicklungsumgebungen nützlich?
Frage: In welchen Situationen ist die /etc/hosts Datei wirklich nützlich?
Antwort: Die /etc/hosts Datei ist besonders in Entwicklungs- und Testumgebungen in folgenden Situationen nützlich:
- Lokale Domain-Tests: Bestimmte Domains können lokal getestet werden. Z. B. die Umleitung von
https://test.localauf eine lokale Anwendung. - DNS-Umgehung: Temporäre Verbindung zu einer anderen IP ohne die tatsächlichen DNS-Servereinstellungen. Z. B.:
example.commit einer anderen Server-IP verbinden. - Interne Kommunikation zwischen Anwendungen: Durch die Verwendung von /etc/hosts in der Kommunikation zwischen mehreren Anwendungen, die auf demselben Server laufen, kann die Anzahl der DNS-Anfragen reduziert und die Kommunikationsgeschwindigkeit optimiert werden.
6. Der Wert der Datei /etc/hosts bei dynamischen IP- und DNS-Cache-Problemen
Persönliche Erfahrung: Entwickler, die dynamische IPs verwenden, lösen häufig das IP-Änderungsproblem durch DDNS (Dynamic DNS). Es gibt jedoch ein Problem: Der Linux-Host hat einen DNS-Cache, weshalb er die vorherige IP-Adresse bis zum Ablauf der TTL (Time to Live) weiterhin nutzt. Dies kann dazu führen, dass in der Kommunikation zwischen Anwendungen weiterhin TCP-Anfragen an die früheren IP-Adressen gesendet werden, es sei denn, der Cache wird manuell mit dem Befehl sudo resolvectl flush-caches gelöscht.
Um dieses Problem zu lösen, kann man mit der Datei /etc/hosts die DNS-Nutzung umgehen und eine bestimmte Domain immer auf eine feste IP-Adresse umleiten. Ich habe die Erfahrung gemacht, dass ich so Kommunikationsprobleme, die durch IP-Änderungen verursacht wurden, vollständig verhindern konnte. Diese einfache Einstellung stellte sich als der Schlüssel zur Problemlösung heraus, was mich sehr beeindruckte.
Fazit
Durch diesen gesamten Prozess wurde mir bewusst, dass die unbewusste Nutzung von localhost und der Datei /etc/hosts eng mit den grundlegenden Netzwerkmechanismen unter Linux verbunden ist. Ich bewunderte, wie logisch und präzise Linux-Entwickler solche grundlegenden Strukturen entworfen haben. Es war erstaunlich, dass eine einfache Datei sowohl in Entwicklungs- als auch in Produktionsumgebungen eine so wichtige Rolle spielen kann.
Diese Erfahrung hat mir erneut gezeigt, wie wertvoll der Prozess ist, die Essenz der Technologie zu verstehen. 😊
