Posso configurare il file hosts di Windows per usare l'indirizzo IP più la porta?


13

Voglio configurare il file hosts di Windows per inviare richieste host basate su indirizzo IP + porte.

Per esempio:

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

Perché ho Apache in ascolto sulla porta 8080 e IIS sulla porta 80 (impostazione predefinita).

Quindi, penso che il modo migliore per farlo sia quello di modificare il hostsfile. Non sta interessando nulla. Né sto ricevendo alcun errore né alcun messaggio.


1
Otterrai una risposta migliore ponendo questo tipo di domande su serverfault.com
Carl Norum,

Perché non riesci a lanciare site1.com (: 80) e sitetwo.com:8080 nel tuo browser?
Yvan

Risposte:


11

Non puoi. Il file hosts è proprio questo: host. È l'equivalente di un DNS "in cortocircuito" all'interno del tuo computer locale. Anche il DNS non può inviarti alle porte.

Per ottenere ciò che stai cercando di fare, ti consigliamo di impostare l'hosting virtuale sotto IIS o Apache e utilizzarlo (basato sull'intestazione HTTP Host:) per consentire al servizio di decidere quale sito presentare. Questo non ti aiuterà, tuttavia, se vuoi farlo contemporaneamente con IIS e Apache.


potresti essere chiaro, non ho capito l'hosting virtuale. Come posso fare l'hosting virtuale?

4
  • Il hostsfile è solo per la risoluzione del nome host
  • Il browser , in assenza di specificare direttamente la porta: ovvero <hostname>:<port>, per impostazione predefinita porta80

Scenario tipico del problema

  1. le applicazioni in genere impostano i loro server sullo stesso indirizzo IP predefinito 127.0.0.1aka localhost (definito nel file hosts) .
  2. per evitare la collisione tra eventuali altri server esistenti / in esecuzione, l'applicazione in genere consente di modificare la porta, ma non l'indirizzo IP.

    2a. Se potessi cambiare l'indirizzo IP del server con un altro nello spazio degli indirizzi riservati del loopback127.0.0.0/8 , probabilmente non tenteresti di impostare le porte nel file hosts.

Possibile soluzione

È possibile aggirare questo problema utilizzando lo strumento di rete incluso di Windowsnetsh come proxy di porta.


Panoramica

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

Azioni

  • Avvia il tuo server localhost:8081
  • Aggiungi il "DNS locale" nel file hosts come nuova riga
    • 127.65.43.21 example.app
      • È 127.0.0.0/8possibile utilizzare qualsiasi indirizzo gratuito nella rete .
      • Nota: presumo che127.65.43.21:80non sia occupato da un altro servizio.
      • Puoi verificare con netstat -a -n -p TCP | grep "LISTENING"
  • aggiungere la seguente configurazione di rete con l' utilità del comando netsh
    • netsh interface portproxy add v4tov4 listenport=80 listenaddress=127.65.43.21 connectport=8081 connectaddress=127.0.0.1
  • Accedi al server all'indirizzo http://example.app

Note:
- Questi comandi / modifiche ai file devono essere eseguiti con diritti di amministratore

- netsh portproxy necessita delle librerie ipv6 anche solo per usare v4tov4, in genere saranno incluse anche di default, altrimenti installale usando il seguente comando:netsh interface ipv6 install


Puoi vedere la voce che hai aggiunto con il comando:

netsh interface portproxy show v4tov4

È possibile rimuovere la voce con il seguente comando:

netsh interface portproxy delete v4tov4 listenport=80 listenaddress=127.65.43.21


Collegamenti alle risorse:

Nota: questa risposta è una duplicazione della mia risposta discussa in questa domanda / risposta simile su stackoverflow.


Questa è un'ottima risposta ... grazie per i collegamenti alle risorse!
Eric Hepperle - CodeSlayer2010,

3

No, non puoi. Se non funziona, allora qualcos'altro sta andando storto.

127.0.0.1 site.com
127.0.0.1 www.site.com

Presumo che questo sia per una scatola di sviluppo?

DNS risolverà site.com e www.site.com in localhost fintanto che non stai facendo qualcosa di simile al proxy delle tue query DNS. Probabilmente dovresti chiedere a ServerFault la guida alla configurazione del server web, questo è il problema più probabile.


Grazie per l'aiuto!!! Ma non c'è modo ??? Quindi come posso eseguire IIS e Apache in parallelo con porte diverse

Stanno ancora andando allo stesso indirizzo, la porta non tiene nemmeno conto di ciò che fanno gli host. La porta continuerà a funzionare, puoi eseguirli in parallelo.
Xorlev,

3

Puoi farlo con Fiddler . Con lo script di Fiddler , puoi fare molte cose fantastiche.

Se imposti gli host in questo modo

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

Aggiungi questo in CustomRules.js (per aprire CustomRules.js , scegli Personalizza regole nel menu Regole di Fiddler )

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

Quindi Fiddler converte l'host e ti connetterai alla porta 8080.


Sei a conoscenza di qualche alternativa open source (james, owasp zap o altro) che può essere utilizzata per lo stesso effetto?
Marc.2377,

1

Stai usando i server solo per lo sviluppo locale? In tal caso, puoi mettere Apache in ascolto di 127.0.0.2:80 e reindirizzarlo con il file hosts sul nome di dominio che ti piace.


0

Come per le altre risposte, il file host non ha informazioni sulla porta, ma puoi avere una pagina che reindirizza sull'intestazione come farebbe apache o IIS per l'hosting virtuale basato sul nome. Controlla l'intestazione e reindirizza come necessario. Tuttavia non vedo davvero il valore in questo mentre stai reinventando la ruota. Apache supporta l'hosting virtuale basato su porte e presumo che lo sia.

Il tuo obiettivo è avere una macchina di sviluppo con entrambi i nostri è questo per una situazione di produzione.



-1

Questo è ciò che puoi fare, sarebbe utile solo per lo sviluppo locale.

file hosts:

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

In IIS, creare un nuovo sito Web e per local.site1.com e local.site2.com

Installazione IIS

  • Indirizzo IP: tutti non assegnati (userebbe l'host locale o qualsiasi altro ip disponibile)
  • Porta: diversa da quella già in uso (81,82,83 e così via. 80 è già in uso dal sito Web predefinito)
  • Nome host: lascialo vuoto

Sei bravo ad andare. Assicurati solo che le porte che hai utilizzato non siano utilizzate da altri processi e siano aperte anche da firewall, antivirus, ecc.

Successivamente è possibile utilizzare i seguenti URL per accedere ai siti Web dal computer locale o dalla LAN.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.