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.


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.


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.


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.


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.


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.


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.



-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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.