Posso configurar o arquivo de hosts do Windows para usar o endereço IP mais a porta?


13

Desejo configurar o arquivo de hosts do Windows para enviar solicitações de host com base no endereço IP + portas.

Por exemplo:

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

Porque eu tenho o Apache ouvindo na porta 8080 e o IIS na porta 80 (padrão).

Então, acho que a melhor maneira de fazer isso é modificar o hostsarquivo. Não está afetando nada. Não estou recebendo nenhum erro nem mensagem.


1
Você obterá uma resposta melhor com esse tipo de pergunta em serverfault.com
Carl Norum

Por que você não pode simplesmente iniciar site1.com (: 80) e sitetwo.com:8080 no seu navegador?
Yvan

Respostas:


11

Você não pode. O arquivo hosts é exatamente isso - hosts. É o equivalente a um DNS "em curto-circuito" na sua máquina local. O DNS também não pode enviar você para portas.

Para conseguir o que você está tentando fazer, convém configurar a hospedagem virtual no IIS ou Apache e usá-la (com base no cabeçalho HTTP Host:) para permitir que o serviço decida qual site apresentar. Isso não ajudará você, no entanto, se você quiser fazer isso com o IIS e o Apache simultaneamente.


você pode estar claro, eu não entendi sobre hospedagem virtual. Como posso fazer a hospedagem virtual?

4
  • O hostsarquivo é apenas para resolução de nome de host
  • O navegador , na ausência de especificar diretamente a porta: ou seja <hostname>:<port>, o padrão é port80

Cenário de problema típico

  1. aplicações normalmente definir seus servidores para o mesmo endereço IP padrão 127.0.0.1aka localhost (definido no arquivo hosts) .
  2. para evitar colisão entre possivelmente outros servidores existentes / em execução, o aplicativo normalmente permite alterar a porta, mas não o endereço IP.

    2a Se você pudesse alterar o endereço IP do servidor para outro no espaço de endereço reservado para loopback 127.0.0.0/8 , provavelmente não tentaria definir portas no arquivo de hosts.

Solução possível

Você pode contornar isso usando a ferramenta de rede incluída no Windowsnetsh como um proxy de porta.


Visão geral

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

Ações

  • Inicie seu servidor em localhost:8081
  • Adicione o "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/8pode ser usado.
      • Nota: Estou assumindo que127.65.43.21:80não está ocupado por outro serviço.
      • Você pode verificar com netstat -a -n -p TCP | grep "LISTENING"
  • adicione 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
  • Acesse 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 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:

Nota: esta resposta é uma duplicação da minha resposta discutida nesta pergunta / resposta semelhante no stackoverflow.


Esta é uma ótima resposta ... obrigado pelos links dos recursos!
Eric Hepperle - CodeSlayer2010

3

Não, você não pode. Se não estiver funcionando, algo está errado.

127.0.0.1 site.com
127.0.0.1 www.site.com

Presumo que isto é para uma caixa de desenvolvimento?

O DNS resolverá o site.com e o site www.site.com como host local, desde que você não faça algo como proxy de suas consultas DNS. Você provavelmente deve pedir ajuda na configuração do servidor da ServerFault, esse é o problema mais provável.


Obrigado pela ajuda!!! Mas não há nenhuma maneira??? Então, como eu posso executar o IIS e Apache paralelamente com portas diferentes

Eles ainda estão indo para o mesmo endereço, a porta nem sequer leva em consideração o que os hosts fazem. A porta ainda funcionará, você pode executá-las em paralelo.
Xorlev

3

Você pode fazer isso com o Fiddler . Com o script do Fiddler , você pode fazer muitas coisas incríveis.

Se você definir hosts como este

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

Adicione isso no CustomRules.js (para abrir o CustomRules.js , escolha Personalizar regras no menu Regras do violinista )

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

Em seguida, o Fiddler converte o host e você se conecta à porta 8080.


Você conhece alguma alternativa de código aberto (james, owasp zap ou outra) que possa ser usada com o mesmo efeito?
precisa saber é o seguinte

1

Você está usando os servidores apenas para desenvolvimento local? Nesse caso, você pode colocar seu Apache para ouvir 127.0.0.2:80 e redirecioná-lo com o arquivo hosts para o nome de domínio que você gosta.


0

Como nas outras respostas, o arquivo host não possui informações de porta, mas você pode ter uma página que redirecione o viés do cabeçalho, como o apache ou o IIS faria para a hospedagem virtual baseada em nome. Verifique o cabeçalho e redirecione conforme necessário. No entanto, eu realmente não vejo o valor nisso, pois você está reinventando a roda. O Apache suporta hospedagem virtual baseada em porta e presumo que o iis suporte.

O seu objetivo é ter uma máquina de desenvolvimento com ambos executando o nosso para uma situação de produção.



-1

Isto é o que você pode fazer, seria útil apenas para o desenvolvimento local.

arquivo hosts:

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

No IIS, crie um novo site e para local.site1.com & local.site2.com

Instalação do IIS

  • Endereço IP: todos não atribuídos (usaria host local ou qualquer outro ip disponível)
  • Porta: outra que não esteja em uso (81,82,83 e assim por diante. 80 já está em uso pelo site padrão)
  • Nome do host: deixe em branco

Você está pronto para ir. Apenas certifique-se de que as portas que você usou não estejam sendo usadas por outro processo e também estejam abertas a partir de firewall, antivírus etc.

Depois disso, você pode usar os seguintes URLs para acessar sites da máquina local ou da LAN.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.