Kann ich die Windows-Hosts-Datei für die Verwendung der IP-Adresse plus Port konfigurieren?

13

Ich möchte die Windows- Hostdatei so konfigurieren , dass Hostanforderungen basierend auf IP-Adresse und Ports gesendet werden.

Beispielsweise:

127.0.0.1:80       www.site1.com
127.0.0.1:8080     www.sitetwo.com

Weil Apache auf Port 8080 und IIS auf Port 80 lauscht (Standardeinstellung).

Also, ich denke, der beste Weg, dies zu tun, ist die hostsDatei zu ändern . Es beeinflusst nichts. Ich erhalte weder eine Fehlermeldung noch eine Nachricht.

Peter Mortensen
quelle
1
Auf serverfault.com
Carl Norum
Warum können Sie site1.com (: 80) und sitetwo.com:8080 nicht einfach in Ihrem Browser starten ?
Yvan

Antworten:

11

Das kannst du nicht. Die hosts-Datei ist genau das - hosts. Dies entspricht einem kurzgeschlossenen DNS auf Ihrem lokalen Computer. DNS kann Sie auch nicht an Ports senden.

Um das zu erreichen, was Sie versuchen, sollten Sie virtuelles Hosting unter IIS oder Apache einrichten und diesen (basierend auf dem HTTP-Host: -Header) verwenden, damit der Dienst entscheidet, welche Site präsentiert werden soll. Dies hilft Ihnen jedoch nicht, wenn Sie dies mit IIS und Apache gleichzeitig tun möchten.


quelle
Könnten Sie bitte klar sein, ich verstand nicht über virtuelles Hosting. Wie kann ich das virtuelle Hosting machen?
4
  • Die hostsDatei ist nur für die Auflösung von Hostnamen vorgesehen
  • Wenn der Browser den Port nicht direkt angibt <hostname>:<port>, wird standardmäßig der Port verwendet80

Typisches Problemszenario

  1. Anwendungen setzen ihre Server normalerweise auf die gleiche Standard-IP-Adresse, auch 127.0.0.1bekannt als localhost (in der Hosts-Datei definiert) .
  2. Um eine Kollision zwischen möglicherweise vorhandenen / laufenden Servern zu vermeiden, können Sie in der Regel den Port ändern, nicht jedoch die IP-Adresse.

    2a. Wenn Sie die IP-Adresse des Servers im reservierten Loopback-Adressraum ändern könnten 127.0.0.0/8, würden Sie wahrscheinlich nicht versuchen, Ports in der Hosts-Datei festzulegen.

Mögliche Lösung

Sie können dies umgehen, indem Sie das in Windows enthaltene Netzwerk-Tool netshals Port-Proxy verwenden.


Überblick

example.app
 |                               <--browser defaults to port 80
 +--> example.app:80
       |                         <--Hostname resolution by Hosts File
       +--> 127.65.43.21:80      
             |                   <--Link by netsh Utility
             +--> 127.0.0.1:8081

Aktionen

  • Starten Sie Ihren Server auf localhost:8081
  • Fügen Sie den "lokalen DNS" in der Hosts-Datei als neue Zeile hinzu
    • 127.65.43.21 example.app
      • Jede freie Adresse im Netzwerk 127.0.0.0/8kann verwendet werden.
      • Hinweis: Ich gehe davon aus, dass127.65.43.21:80kein anderer Dienstverfügbarist.
      • Sie können mit überprüfen netstat -a -n -p TCP | grep "LISTENING"
  • Fügen Sie die folgende Netzwerkkonfiguration mit dem Dienstprogramm netsh hinzu
    • netsh interface portproxy add v4tov4 listenport=80 listenaddress=127.65.43.21 connectport=8081 connectaddress=127.0.0.1
  • Greifen Sie auf den Server unter zu http://example.app

Hinweise:
- Diese Befehle / Dateiänderungen müssen mit Administratorrechten ausgeführt werden

- netsh portproxy benötigt IPv6-Bibliotheken, auch wenn sie nur v4tov4 verwenden. In der Regel sind sie auch standardmäßig enthalten. Andernfalls installieren Sie sie mit dem folgenden Befehl:netsh interface ipv6 install


Sie können den Eintrag sehen, den Sie mit dem Befehl hinzugefügt haben:

netsh interface portproxy show v4tov4

Sie können den Eintrag mit dem folgenden Befehl entfernen :

netsh interface portproxy delete v4tov4 listenport=80 listenaddress=127.65.43.21


Links zu Ressourcen:

Hinweis: Diese Antwort ist eine Kopie meiner Antwort, die in dieser ähnlichen Frage / Antwort zum Stapelüberlauf erörtert wurde.

Pau Coma Ramirez
quelle
Dies ist eine großartige Antwort ... Danke für die Links zu den Ressourcen!
Eric Hepperle - CodeSlayer2010
3

Nein, kannst du nicht. Wenn es nicht funktioniert, läuft etwas anderes schief.

127.0.0.1 site.com
127.0.0.1 www.site.com

Ich nehme an, das ist für eine Entwicklungsbox?

DNS löst site.com und www.site.com in localhost auf, solange Sie nicht so etwas wie das Proxyen Ihrer DNS-Abfragen ausführen. Sie sollten wahrscheinlich bei ServerFault nach Hilfe zur Webserverkonfiguration fragen, das ist das wahrscheinlichste Problem.

Xorlev
quelle
Danke für die Hilfe!!! Aber es gibt keinen Weg ??? Wie kann ich dann iis und apache parallel mit verschiedenen Ports ausführen
Sie werden immer noch an dieselbe Adresse gesendet, der Port spielt keine Rolle, was Hosts tun. Der Port wird weiterhin funktionieren, Sie können sie parallel ausführen.
Xorlev
3

Das kannst du mit Fiddler machen . Mit dem Fiddler-Skript können Sie viele erstaunliche Dinge tun.

Wenn Sie Hosts wie folgt festlegen

127.0.0.1     www.site1.com    # Port 80
127.0.0.1     www.sitetwo.com  # Port 8080

Fügen Sie diese in CustomRules.js (zu öffnen CustomRules.js , wählen anpassen Regeln auf Fiddlers Regeln Menü)

// this method is already exist
static function OnBeforeRequest(oSession: Session) {  
    if (oSession.host.toLowerCase() == "www.sitetwo.com") 
        oSession.host = "www.sitetwo.com:8080";
    ...
}

Dann konvertiert Fiddler den Host und Sie stellen eine Verbindung zu Port 8080 her.

Sanghyun Lee
quelle
Kennen Sie eine Open-Source-Alternative (james, owasp zap oder andere), die zum selben Effekt verwendet werden kann?
Marc.2377
1

Verwenden Sie die Server nur für die lokale Entwicklung? Wenn ja, können Sie Ihren Apache so einstellen, dass er 127.0.0.2:80 abhört und dies mit der hosts-Datei auf den gewünschten Domainnamen umleitet.

Elmo Allén
quelle
0

Wie bei den anderen Antworten enthält die Host-Datei keine Port-Informationen, Sie können jedoch eine Seite erstellen, die den Header umleitet, wie dies Apache oder IIS für namensbasiertes virtuelles Hosting tun würden. Überprüfen Sie den Header und leiten Sie ihn nach Bedarf um. Allerdings sehe ich den Wert darin nicht wirklich, da Sie das Rad neu erfinden. Apache unterstützt portbasiertes virtuelles Hosting und ich gehe davon aus, dass dies der Fall ist.

Ist Ihr Ziel, eine Entwicklungsmaschine zu haben, auf der beide laufen, ist dies für eine Produktionssituation.

Wiederholung
quelle
-1

Dies ist, was Sie tun können, es wäre nur für die lokale Entwicklung hilfreich.

Hosts-Datei:

  • 127.0.0.1 local.site1.com
  • 127.0.0.1 local.site2.com

Erstellen Sie in IIS eine neue Website für local.site1.com und local.site2.com

IIS-Setup

  • IP-Adresse: Alle nicht zugewiesen (es wird ein lokaler Host oder eine andere verfügbare IP-Adresse verwendet)
  • Port: jeder andere als der bereits verwendete (81,82,83 und so weiter. 80 wird bereits von der Standard-Website verwendet)
  • Hostname: Lassen Sie das Feld leer

Du bist startklar. Stellen Sie einfach sicher, dass die von Ihnen verwendeten Ports nicht von einem anderen Prozess verwendet werden und auch von Firewall, Antivirus usw. geöffnet sind.

Danach können Sie die folgenden URLs verwenden, um über einen lokalen Computer oder ein LAN auf Websites zuzugreifen.

Amit Andharia
quelle