Czy mogę skonfigurować plik hosts Windows, aby używał adresu IP i portu?

13

Chcę skonfigurować plik hosts Windows , aby wysyłał żądania hostów na podstawie adresu IP + portów.

Na przykład:

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

Ponieważ mam Apache nasłuchujący na porcie 8080 i IIS na porcie 80 (domyślnie).

Myślę więc, że najlepszym sposobem na to jest modyfikacja hostspliku. Nic na to nie wpływa. Ani nie otrzymuję żadnego błędu ani żadnej wiadomości.

Peter Mortensen
źródło
1
Lepszą odpowiedź otrzymasz zadając tego rodzaju pytanie na serverfault.com
Carl Norum
Dlaczego nie możesz po prostu uruchomić site1.com (: 80) i sitetwo.com:8080 w przeglądarce?
Yvan

Odpowiedzi:

11

Nie możesz Plik hosts jest właśnie taki - hosts. Jest to odpowiednik „zwartego” DNS na twoim komputerze lokalnym. DNS nie może również wysłać Cię do portów.

Aby osiągnąć to, co próbujesz zrobić, powinieneś skonfigurować wirtualny hosting w IIS lub Apache i użyć go (w oparciu o nagłówek HTTP Host:), aby pozwolić usłudze zdecydować, którą stronę przedstawić. To ci nie pomoże, jeśli chcesz robić to jednocześnie z IIS i Apache.


źródło
proszę wyjaśnić, nie rozumiem wirtualnego hostingu. Jak mogę zrobić wirtualny hosting?
4
  • hostsPlik jest tylko do rozpoznawania nazw hostów
  • Przeglądarka , w przypadku braku bezpośredniego wprowadzania portu IE <hostname>:<port>, domyślnie do portu80

Typowy scenariusz problemu

  1. aplikacje zwykle ustawiają swoje serwery na ten sam domyślny adres IP 127.0.0.1aka localhost (zdefiniowany w pliku hosts) .
  2. Aby uniknąć kolizji między ewentualnie innymi istniejącymi / działającymi serwerami, aplikacja zazwyczaj pozwala na zmianę portu, ale nie adresu IP.

    2a. Jeśli możesz zmienić adres IP serwera na inny w zarezerwowanej przestrzeni adresowej pętli zwrotnej 127.0.0.0/8 , prawdopodobnie nie będziesz próbował ustawić portów w pliku hosts.

Możliwe rozwiązanie

Można obejść ten problem za pomocą narzędzia sieciowego dołączonego do systemu Windowsnetsh jako serwera proxy portu.


Przegląd

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

działania

  • Uruchom serwer na localhost:8081
  • Dodaj „lokalny DNS” do pliku hosts jako nowy wiersz
    • 127.65.43.21 example.app
      • 127.0.0.0/8Można użyć dowolnego bezpłatnego adresu w sieci .
      • Uwaga: Zakładam, że127.65.43.21:80nie jest zajęty przez inną usługę.
      • Możesz to sprawdzić za pomocą netstat -a -n -p TCP | grep "LISTENING"
  • dodaj następującą konfigurację sieci netsh polecenia narzędzia
    • netsh interface portproxy add v4tov4 listenport=80 listenaddress=127.65.43.21 connectport=8081 connectaddress=127.0.0.1
  • Uzyskaj dostęp do serwera pod adresem http://example.app

Uwagi:
- Te polecenia / modyfikacje plików muszą być wykonywane z uprawnieniami administratora

- netsh portproxy potrzebuje bibliotek ipv6 nawet tylko do korzystania z v4tov4, zazwyczaj będą one również domyślnie dołączone, w przeciwnym razie zainstaluj je za pomocą następującego polecenia:netsh interface ipv6 install


Możesz zobaczyć wpis dodany za pomocą polecenia:

netsh interface portproxy show v4tov4

Możesz usunąć wpis za pomocą następującego polecenia:

netsh interface portproxy delete v4tov4 listenport=80 listenaddress=127.65.43.21


Linki do zasobów:

Uwaga: ta odpowiedź jest duplikatem mojej odpowiedzi omówionej w tym podobnym pytaniu / odpowiedzi na temat przepełnienia stosu.

Pau Coma Ramirez
źródło
To świetna odpowiedź ... dzięki za linki do zasobów!
Eric Hepperle - CodeSlayer2010
3

Nie możesz. Jeśli to nie działa, coś innego idzie nie tak.

127.0.0.1 site.com
127.0.0.1 www.site.com

Zakładam, że to jest dla pudełka programistycznego?

DNS rozpoznaje site.com i www.site.com na localhost, o ile nie robisz czegoś takiego jak proxy zapytań DNS. Prawdopodobnie powinieneś poprosić w ServerFault o pomoc w konfiguracji serwera, to najprawdopodobniej problem.

Xorlev
źródło
Dzięki za pomoc!!! Ale nie ma mowy? Jak mogę uruchomić iis i apache równolegle z różnymi portami
Nadal idą pod ten sam adres, port nawet nie bierze pod uwagę tego, co robią hosty. Port nadal będzie działał, możesz je uruchomić równolegle.
Xorlev
3

Możesz to zrobić za pomocą Fiddlera . Dzięki skryptowi Fiddler możesz uzyskać wiele niesamowitych rzeczy.

Jeśli ustawisz takie hosty

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

Dodaj to w CustomRules.js (aby otworzyć CustomRules.js , wybierz Dostosuj reguły w menu Reguły Fiddlera )

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

Następnie Fiddler przekonwertuje hosta, a połączysz się z portem 8080.

Sanghyun Lee
źródło
Czy znasz jakieś alternatywy typu open source (James, Owasp Zap lub inne), których można użyć do tego samego efektu?
Marc.2377,
1

Czy używasz serwerów tylko do rozwoju lokalnego? Jeśli tak, możesz ustawić serwer Apache na odsłuchiwanie 127.0.0.2:80 i przekierować go za pomocą pliku hosts na nazwę domeny, którą lubisz.

Elmo Allén
źródło
0

Podobnie jak w przypadku innych odpowiedzi, plik hosta nie ma informacji o porcie, ale możesz mieć stronę, która przekierowuje stronniczo na nagłówek, tak jak apache lub IIS dla wirtualnego hostingu opartego na nazwach. Sprawdź nagłówek i przekieruj w razie potrzeby. Jednak tak naprawdę nie widzę w tym wartości, ponieważ wymyślasz koło na nowo. Apache obsługuje wirtualny hosting oparty na portach i zakładam, że iis to robi.

Czy Twoim celem jest posiadanie maszyny deweloperskiej z oboma działającymi naszymi maszynami, jest to odpowiednie do sytuacji produkcyjnej.

ponownie odtwarzać
źródło
-1

To możesz zrobić, byłoby to pomocne tylko dla rozwoju lokalnego.

plik hosts:

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

W usługach IIS utwórz nową stronę internetową oraz dla local.site1.com i local.site2.com

Konfiguracja IIS

  • Adres IP: Wszystkie nieprzypisane (używałby lokalnego hosta lub innego dostępnego adresu IP)
  • Port: dowolny inny niż już używany (81 82,83 itd. 80 jest już używany przez domyślną stronę internetową)
  • Nazwa hosta: pozostaw to pole puste

Możesz ruszać. Upewnij się tylko, że porty, których użyłeś, nie są używane przez inny proces, a także są otwarte z zapory ogniowej, programu antywirusowego itp.

Następnie możesz użyć następujących adresów URL w celu uzyskania dostępu do stron internetowych z lokalnego komputera lub z sieci LAN.

Amit Andharia
źródło