Usando o número da porta no arquivo host do Windows

190

Depois de instalar o TeamViewer, alterei a porta do wampserver para 8080, para que o endereço seja http://localhost:8080.

Para o arquivo host localizado em C: \ WINDOWS \ system32 \ drivers \ etc \, também fiz a alteração conforme abaixo

ANTES
127.0.0.1 www.example.com

DEPOIS DE
127.0.0.1:8080 www.example.com

Quando acesso www.example.com, ele não é redirecionado para o meu wampserver, como posso corrigi-lo?

Charles Yeung
fonte
Você precisa servidor NGNIX ou Apache HTTP como um servidor proxy para o encaminhamento http pedidos para aplicação apropriada -> que escuta determinada porta (ou fazê-lo com CNAME que fornece empresa de hospedagem)
Musa
Talvez revise isso e mude a resposta aceita para a resposta netsh? Acabei aqui ao tentar descobrir como mapear domínios .test para minhas imagens do docker localmente no Windows 10, e a resposta netsh funcionou como um encanto!
Jereme
A questão é: você está tentando redirecionar um host inteiro para uma única porta (?!) Ou apenas a porta 80 (desse host) para a porta 8080? A maioria das respostas aqui são sobre como redirecionar (ou pelo menos tentar redirecionar ... ;-) a porta 80 de um host para a porta 8080 do seu "host local". Exemplo: https://www.example.comdeve ir para a porta 8080? ou para o padrão 443? (como deveria) O que significa: você deseja que um https também seja redirecionado para a porta 8080 do seu host local? Ou você não se importa onde isso será redirecionado?
ilias iliadis

Respostas:

194

o hosts arquivo é apenas para resolução de nome de host (no Windows e em sistemas similares ao Unix). Você não pode inserir números de porta e não há como fazer o que deseja com a configuração genérica no nível do sistema operacional - o navegador é o que seleciona a porta a ser escolhida.

Portanto, use marcadores ou algo parecido.
(Alguns softwares de firewall / roteamento podem permitir o redirecionamento de porta de saída, mas isso realmente não soa como uma opção atraente para isso.)

Esteira
fonte
6
como usar marcadores, você pode nos levar a um link ou alguma documentação ou tutoriais sobre isso
adham dwikat
@Jereme: você deve dizer que o OP, eu não posso fazer nada sobre isso
Mat
1
@ Mat Isso seria bom, certo? Eu só quero que outras pessoas que vêem isso rolem um pouco para baixo e experimentem. Acabei aqui ao tentar descobrir como mapear domínios .test para minhas imagens do docker localmente no Windows 10, e a resposta netsh funcionou como um encanto!
Jereme
169

O que você deseja pode ser alcançado modificando o arquivo hosts através do Fiddler 2 aplicativo .

Siga esses passos:

  1. Instale o Fiddler2

  2. Navegue até o menu do Fiddler2: - Ferramentas > HOSTS .. (Clique para selecionar)

  3. Adicione uma linha como esta: -

    localhost:8080 www.mydomainname.com

  4. Salve o arquivo e faça o checkout www.mydomainname.comno navegador.

Rajat Gupta
fonte
34
Esta é uma solução ruim. Você precisa ter o Fiddler funcionando o tempo todo.
James Huckabone
48
@JamesHuckabone: Você tem uma solução melhor? nós adoraríamos isso!
Rajat Gupta
16
Recebo erro 400 Bad Request quando eu uso este método
Sam
3
isso não parece mais funcionar. Tentei com fiddler2 e fiddler4
basher
1
O @basher U ainda pode escrevê-lo no Rules.js do Fiddler, com certeza. A funcionalidade de hosts no Fiddler NÃO é o Windows hospeda arquivos, é uma recriação desses nomes para facilitar o trabalho. É como os Autoresponders, são apenas um subconjunto do que você pode fazer usando scripts diretamente. Se você não pode fazer algo com menus, faça um script.
M3nda
157

Consegui fazer isso usando a ferramenta de rede incluída no Windowsnetsh .

Como Mat salienta: O arquivo hosts é apenas para resolução de nomes de host, portanto, uma combinação dos dois fez o truque para mim.

Exemplo


Visão geral

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

Ações

  • Iniciou meu servidor em localhost:8081
  • Adicionado meu "DNS local" no arquivo de hosts como uma nova linha
    • 127.65.43.21 example.app
      • Qualquer endereço gratuito na rede 127.0.0.0/8( 127.x.x.x) pode ser usado.
      • Nota: Estou assumindo127.65.43.21:80 não está ocupado por outro serviço.
      • Você pode verificar com netstat -a -n -p TCP | grep "LISTENING"
  • adicionada a seguinte configuração de rede com o utilitário de comando netsh
    • netsh interface portproxy add v4tov4 listenport=80 listenaddress=127.65.43.21 connectport=8081 connectaddress=127.0.0.1
  • Agora posso acessar o servidor em http://example.app

Notas:
- Esses comandos / modificações de arquivos precisam ser executados com direitos de administrador

- netsh portproxy precisa de bibliotecas ipv6 mesmo apenas para usar v4tov4; normalmente elas também serão incluídas por padrão; caso contrário, instale-as usando o seguinte comando:netsh interface ipv6 install


Você pode ver a entrada que você adicionou com o comando:

netsh interface portproxy show v4tov4

Você pode remover a entrada com o seguinte comando:

netsh interface portproxy delete v4tov4 listenport=80 listenaddress=127.65.43.21


Links para Recursos:

Pau Coma Ramirez
fonte
Isso não está funcionando para mim. No link que você mostrou, diz "Além disso, você não pode usar 127.0.0.1 como endereço de conexão".
Don Box
@ DonBox: Se você fornecer mais alguns detalhes sobre sua configuração, talvez eu possa ajudá-lo. Usar 127.0.0.1 como endereço de conexão é basicamente o requisito no cenário de caso apresentado, porque o servidor iniciou no localhost , como, por padrão, muitos outros programas. Se você puder iniciar em outro endereço, não precisará de todo o mecanismo de encaminhamento de porta, basta modificar o arquivo hosts ... Talvez, conforme detalhado aqui , você não tenha o protocolo ipv6 instalado: use o seguinte comando para instalar eles:netsh interface ipv6 install
Pau Coma Ramirez
13
Esta deve ser a resposta aceita, porque as ferramentas já estão instaladas na minha instalação básica do Windows 10 e isso faz exatamente o que eu precisava. Eu estava pensando em instalar o apache e o mod_proxy, mas esta é uma solução muito melhor.
Max novo
1
Não funciona para mim. Netsh parece encaminhar o endereço, mas não a porta.
151117 steph643
2
Eu uso o portuário do estivador. Ele usa o host local na porta 9000. Modificando o comando acima, eu uso o portainer.local sem precisar especificar uma porta no endereço. Primeiro, adiciono 127.0.0.1como o endereço para corresponder portainer.localno meu arquivo hosts. Então eu corro: netsh interface portproxy add v4tov4 listenport=80 listenaddress=127.0.0.1 connectport=9000 connectaddress=127.0.0.1 Pressione a tecla Enter no cmd / powershell para executá-lo. Depois disso, saia do netsh digitando exit. No navegador, digitar http://portainer.localagora me leva para onde http://localhost:9000costumava. Isso funcionou como um encanto para mim.
EffectiX 23/07/19
14

Fiddler2 -> Regras -> Regras personalizadas

em seguida, encontre a função OnBeforeRequest em colocar no próximo script no final:

if (oSession.HostnameIs("mysite.com")){
    oSession.host="localhost:39901";
}
Sergey
fonte
Na verdade, o Fiddler é tão poderoso quanto o esperado para não executar um servidor da Web na porta 80, ou até mesmo o Skype ... No Windows funciona melhor do que no Linux com Mono, pelo menos os recursos de captura, porque o Linux não usa o Inet do CLRL. Esta é uma maneira mais agradável de fazer as coisas no Fiddler, porque é exportável com 1 arquivo.
M3nda
3

A maneira mais simples é usar o Ergo como seu proxy reverso: https://github.com/cristianoliveira/ergo

Você define seus serviços e seu IP: PORT e, portanto, o encaminha para você :).

Você pode conseguir o mesmo usando nginxou apachemas precisará configurá-los.

Cristian Oliveira
fonte
3
Ergo parece ser um projeto em que você trabalhou (com base no nome de usuário). Se for esse o caso, você deve indicar mais explicitamente que é afiliado a esse produto. Veja esta resposta , bem como as outras respostas.
31418 Frank Frank Tan
2

-Você pode usar qualquer endereço gratuito na rede 127.0.0.0/8, no meu caso, precisava disso para o balão python e é isso que eu fiz: adicione esta linha no arquivo hosts (você pode encontrar as janelas em: C: \ Windows \ System32 \ drivers \ etc):

127.0.0.5 flask.dev
  • Verifique se a porta é a porta padrão "80", no meu caso, é o que está no balão python: app.run("127.0.0.5","80")

  • agora execute seu código e navegue flask.dev

Belal Mohammed
fonte
1

Se o que está acontecendo é que você possui outro servidor em execução no host local e deseja atribuir a esse novo servidor um nome de host local diferente, como http://teamviewer/

Eu acho que o que você está realmente procurando é a funcionalidade de hosts virtuais. Eu uso o Apache, então não sei como outros daemons da Web suportam isso. Talvez se chame Alias. Aqui está a documentação do Apache:

Exemplos de hosts virtuais do Apache

DogBot
fonte
1

Usar netsh com connectaddress = 127.0.0.1 não funcionou para mim.

Apesar de procurar em toda parte na internet, não consegui encontrar a solução que resolveu isso para mim, que era usar o endereço address = 127.xxx (ou seja, qualquer endereço 127. ipv4, mas não 127.0.0.1), pois isso parece vincular ao localhost apenas. o mesmo, mas sem a restrição, para que o loopback funcione em netsh.

aards
fonte
Eu sugiro que você remova o primeiro e o último parágrafo. Diga apenas que as soluções existentes não funcionaram e você encontrou outra. Caso contrário, sua resposta será muito parecida com um comentário, para que as pessoas possam sinalizá-la como "não uma resposta" e ela será removida.
precisa saber é o seguinte
0

Você precisa do servidor HTTP NGNIX ou Apache como servidor proxy para encaminhar solicitações http para o aplicativo apropriado -> que escuta uma porta específica (ou faz isso com CNAME, que fornece a empresa de hospedagem). É a solução mais poderosa e é apenas uma maneira muito fácil de continuar adicionando novos subdomínios ou de adicionar novos domínios automaticamente quando os registros DNS são apontados para o servidor.

musa
fonte