Utilizzo del numero di porta nel file host di Windows


190

Dopo aver installato TeamViewer, ho cambiato la porta wampserver in 8080, quindi l'indirizzo è http://localhost:8080.

Per il file host situato in C: \ WINDOWS \ system32 \ drivers \ etc \, ho anche apportato la modifica come di seguito

PRIMA
127.0.0.1 www.example.com

DOPO
127.0.0.1:8080 www.example.com

Quando accedo a www.example.com, non viene reindirizzato al mio wampserver, come posso ripararlo?


È necessario NGNIX o il server HTTP Apache come server proxy per l'inoltro delle richieste http all'applicazione appropriata -> che ascolta una porta particolare (o lo fa con CNAME che fornisce la società di hosting)
Musa


Forse rivedere questo e passare la risposta accettata alla risposta netsh? Sono finito qui quando ho cercato di capire come mappare i domini .test sulle immagini della mia finestra mobile localmente su Windows 10 e la risposta netsh ha funzionato come un fascino!
Jereme,

La domanda è: stai cercando di reindirizzare un intero host su una singola porta (?!) O solo sulla porta 80 (di quell'host) sulla porta 8080? La maggior parte delle risposte qui sono su come reindirizzare (o almeno provare a reindirizzare ... ;-) dalla porta 80 di un host alla porta 8080 del tuo "localhost". Esempio: https://www.example.comdeve andare alla porta 8080? o al 443 predefinito? (come dovrebbe) Il che significa: vuoi che un https venga reindirizzato anche alla porta 8080 del tuo host locale? O non ti interessa affatto dove questo verrà reindirizzato?
ilias iliadis,

Risposte:


195

Il hostsfile è solo per la risoluzione dei nomi host (su Windows e su sistemi simili a Unix). Non puoi inserire i numeri di porta e non c'è modo di fare ciò che desideri con una configurazione a livello di sistema operativo generico: il browser è ciò che seleziona la porta da scegliere.

Quindi usa i segnalibri o qualcosa del genere.
(Alcuni software firewall / di routing potrebbero consentire il reindirizzamento delle porte in uscita, ma in realtà non sembra un'opzione allettante per questo.)


6
come usare i segnalibri, puoi condurci a un link o ad alcuni documenti o tutorial su questo
adham dwikat

@Jereme: dovresti dirlo all'OP, non posso farci niente
Mat

1
@Mat Sarebbe bello, vero? Voglio solo che altri che vedono questo sappiano scorrere un po 'verso il basso e provarci. Sono finito qui quando ho cercato di capire come mappare i domini .test sulle immagini della mia finestra mobile localmente su Windows 10 e la risposta netsh ha funzionato come un fascino!
Jereme,

170

Quello che vuoi può essere ottenuto modificando il file hosts tramite l' applicazione Fiddler 2 .

Segui questi passi:

  1. Installa Fiddler2

  2. Vai al menu Fiddler2: - Strumenti > HOSTS .. ( fai clic per selezionare)

  3. Aggiungi una linea come questa: -

    localhost:8080 www.mydomainname.com

  4. Salvare il file e quindi fare il checkout www.mydomainname.comnel browser.


34
Questa è una cattiva soluzione. Devi avere Fiddler sempre in esecuzione.
James Huckabone,

49
@JamesHuckabone: hai una soluzione migliore? lo adoreremmo!
Rajat Gupta,

16
Ottengo una richiesta errata di errore 400 quando utilizzo questo metodo
Sam

3
questo non sembra più funzionare. Ho provato sia con fiddler2 che con fiddler4
basher il

1
@basher U può sicuramente scriverlo su Fiddler's Rules.js di sicuro. La funzionalità degli host su Fiddler NON è il file host di Windows, è una ricreazione di quei nomi per renderli facili da lavorare. È come gli Autoresponder, sono solo un sottoinsieme di ciò che è possibile fare script direttamente. Se non riesci a fare qualcosa con i menu, scrivilo.
m3nda,

159

Sono riuscito a raggiungere questo obiettivo utilizzando lo strumento di rete incluso di Windowsnetsh .

Come sottolinea Mat: il file hosts è solo per la risoluzione del nome host, quindi una combinazione dei due ha funzionato per me.

Esempio


Panoramica

example.app:80
 |                           <--Link by Hosts File
 +--> 127.65.43.21:80
       |                     <--Link by netsh Utility
       +--> localhost:8081

Azioni

  • Ho avviato il mio server localhost:8081
  • Aggiunto il mio "DNS locale" nel file hosts come nuova riga
    • 127.65.43.21 example.app
      • È possibile utilizzare qualsiasi indirizzo gratuito nella rete 127.0.0.0/8( 127.x.x.x).
      • Nota: presumo che127.65.43.21:80non sia occupato da un altro servizio.
      • Puoi verificare con netstat -a -n -p TCP | grep "LISTENING"
  • aggiunta 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
  • Ora posso accedere 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:


Questo non funziona per me. Nel link che hai mostrato dice "Inoltre non puoi usare 127.0.0.1 come indirizzo di connessione".
Don Box,

@DonBox: se fornisci ulteriori dettagli sulla tua installazione, forse potrei aiutarti. L'uso di 127.0.0.1 come indirizzo di connessione è fondamentalmente il requisito nello scenario del caso presentato perché il server è stato avviato su localhost , come per impostazione predefinita molti altri programmi. Se puoi iniziare da un altro indirizzo non hai bisogno dell'intero meccanismo di port forwarding, devi solo modificare il file hosts ... Forse, come dettagliato qui , non hai installato il protocollo ipv6 : usa il seguente comando per installare loro:netsh interface ipv6 install
Pau Coma Ramirez,

13
Questa dovrebbe essere la risposta accettata perché gli strumenti sono già installati nella mia installazione di Windows 10 di base e questo fa esattamente quello di cui avevo bisogno. Stavo pensando di installare apache e mod_proxy ma questa è una soluzione molto migliore.
Max Young,

2
Non funziona per me. Netsh sembra inoltrare l'indirizzo, ma non la porta.
steph643,

2
Uso il portainer di Docker. Utilizza localhost sulla porta 9000. Modificando il comando sopra, uso portainer.local senza dover specificare una porta sull'indirizzo. In primo luogo, aggiungo 127.0.0.1come indirizzo da abbinare portainer.localnel mio file hosts. Quindi corro: netsh interface portproxy add v4tov4 listenport=80 listenaddress=127.0.0.1 connectport=9000 connectaddress=127.0.0.1 premi invio chiave in cmd / powershell per eseguirlo. Dopodiché, esci da netsh digitando exit. Nel browser, la digitazione http://portainer.localora mi porta dove era http://localhost:9000solito. Questo ha funzionato come un incanto per me.
EffectiX,

14

Fiddler2 -> Regole -> Regole personalizzate

quindi trovare la funzione OnBeforeRequest su mettere nello script successivo alla fine:

if (oSession.HostnameIs("mysite.com")){
    oSession.host="localhost:39901";
}

In effetti Fiddler è molto potente di quanto si aspetti di non eseguire un server web sulla porta 80, o addirittura di Skype ... Su Windows funziona meglio che in Linux con Mono, almeno le funzionalità di acquisizione, perché Linux non utilizza Inet da CLRL. Questo è un modo migliore per fare le cose su Fiddler, perché è esportabile con 1 file.
m3nda,

3

Il modo più semplice è usare Ergo come proxy inverso: https://github.com/cristianoliveira/ergo

Hai impostato i tuoi servizi e il suo IP: PORT ed ergo lo instradano per te :).

Puoi ottenere lo stesso risultato usando nginxo apachema dovrai configurarli.


4
Sembra che Ergo sia un progetto su cui hai lavorato (basato sul nome utente). In tal caso, dovresti indicare più esplicitamente che sei affiliato a quel prodotto. Vedi questa risposta così come le altre risposte.
Frank Tan,

2

-È possibile utilizzare qualsiasi indirizzo gratuito nella rete 127.0.0.0/8, nel mio caso questo era necessario per il pallone in pitone e questo è quello che ho fatto: aggiungere questa riga nel file hosts (puoi trovare che è windows sotto: C: \ Windows \ System32 \ drivers \ etc):

127.0.0.5 flask.dev
  • Assicurarsi che la porta sia la porta predefinita "80" nel mio caso, questo è ciò che si trova nella beuta di Python: app.run("127.0.0.5","80")

  • ora esegui il tuo codice e naviga flask.dev


1

Se ciò che sta accadendo è che hai un altro server in esecuzione su localhost e vuoi assegnare a questo nuovo server un nome host locale diverso come http://teamviewer/

Penso che ciò che stai effettivamente cercando sia la funzionalità Virtual Hosts. Uso Apache quindi non so come altri demoni Web supportano questo. Forse si chiama Alias. Ecco la documentazione di Apache:

Esempi di host virtuali Apache


1

L'uso di netsh con connectaddress = 127.0.0.1 non ha funzionato per me.

Nonostante abbia cercato dappertutto su Internet non sono riuscito a trovare la soluzione che mi ha risolto, che era usare connectaddress = 127.xxx (cioè qualsiasi indirizzo IP. 127, non solo 127.0.0.1) in quanto sembra ricollegarsi a localhost lo stesso ma senza la limitazione, in modo che il loopback funzioni in netsh.


Ti consiglio di rimuovere il primo e l'ultimo paragrafo. Basta dire che le soluzioni esistenti non hanno funzionato e ne hai trovato un'altra. Altrimenti la tua risposta assomiglia molto a un commento, quindi le persone potrebbero contrassegnarlo come "non una risposta" e verrà rimosso.
StaceyGirl


0

È necessario il server HTTP NGNIX o Apache come server proxy per l'inoltro delle richieste http all'applicazione appropriata -> che ascolta una porta particolare (o lo fa con CNAME che fornisce la società di hosting). È la soluzione più potente e questo è solo un modo davvero semplice per continuare ad aggiungere nuovi sottodomini o per aggiungere nuovi domini automaticamente quando i record DNS sono puntati sul server.

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.