Curingas em um arquivo de hosts do Windows

289

Quero configurar minha máquina de desenvolvimento local para que quaisquer solicitações *.localsejam redirecionadas para localhost. A idéia é que, ao desenvolver vários sites, posso adicionar vhosts ao Apache chamadossite1.local , site2.localetc, e tê-los todos determinação de localhost, enquanto o Apache serve um site diferente em conformidade.

Estou no Windows XP.

Eu tentei adicionar

127.0.0.1       *.local

para o meu c:\windows\system32\drivers\etc\hostsarquivo, também tentei:

127.0.0.1       .local

Nenhum dos quais parece funcionar.

Eu sei que posso configurá-los em diferentes números de porta, mas isso é uma dor, pois é difícil lembrar qual porta é qual.

Eu não quero ter que configurar um servidor DNS local ou qualquer coisa difícil, alguma sugestão?

EvilPuppetMaster
fonte
1
Por favor, sinta-se livre para usar anysubdomain.reconn.co.uk como uma solução alternativa (se você estiver online), o que sempre apontará para o seu host local (veja minha resposta abaixo).
Paul Grimshaw
que tal um script que analise o apache vhosts ServerName e atualize o arquivo hosts?
Elvis Ciotti
1
Eu acredito que * .local tem semântica especial, e você deve usar algo inexistente. Uso * .dev, pois não acho que isso seja real.
WraithKenny

Respostas:

431

O Proxy DNS acrílico (código aberto e gratuito) faz o trabalho. Ele cria um servidor DNS proxy (no seu próprio computador) com seu próprio arquivo hosts. O arquivo hosts aceita caracteres curinga.

Download do site oficial

http://mayakron.altervista.org/support/browse.php?path=Acrylic&name=Home

Configurando o Proxy DNS Acrílico

Para configurar o Acrylic DNS Proxy, instale-o no link acima e vá para:

  1. Começar
  2. Programas
  3. Proxy DNS acrílico
  4. Config
  5. Editar arquivo de hosts personalizados (AcrylicHosts.txt)

Adicione as seguintes linhas no final do arquivo:

127.0.0.1   *.localhost
127.0.0.1   *.local
127.0.0.1   *.lc

Reinicie o serviço Proxy DNS acrílico:

  1. Começar
  2. Programas
  3. Proxy DNS Acrílico
  4. Config
  5. Reinicie o serviço de acrílico

Você também precisará ajustar sua configuração de DNS nas configurações da interface de rede:

  1. Começar
  2. Painel de controle
  3. Rede e Internet
  4. Conexões de rede
  5. Propriedades da conexão local
  6. TCP / IPv4

Defina "Use o seguinte endereço do servidor DNS":

Preferred DNS Server: 127.0.0.1

Se você combinar essa resposta com a resposta de jeremyasnyder (usando VirtualDocumentRoot), poderá configurar automaticamente domínios / hosts virtuais simplesmente criando um diretório.

Petah
fonte
12
Só para esclarecer, o "arquivo de hosts personalizados" é AcrylicHosts.txt, não AcrylicConfiguration.ini. Talvez isso deva ser óbvio, mas isso me confundiu por um tempo.
Mhry1384
@ Petah - essa configuração exata estava funcionando para mim com domínios curinga, mas simplesmente parou e não consigo entender o porquê. Todas as solicitações retornam "Esta página está indisponível". Reinicie o Acryllic, redefina todos os caches ... o que mais você acha que poderia ser?
SB2055 4/04
1
@ SB2055 verifique se as configurações de DNS nas propriedades da sua rede ainda estão corretas.
Petah
Deve-se notar que o Acrylic não é adequado para situações em que o ambiente de rede muda com frequência. O servidor DNS público do Google não resolve nomes reais de máquinas em sua rede ... e você pode corrigi-lo em uma rede, mas ainda não conseguirá resolver nomes internos de máquinas quando acessar outra rede. Isso pode ser especialmente doloroso. Mas devo salientar também que não sei tudo o que há para saber sobre acrílico.
Alex Dresko
Se isso for feito em uma VM, o PrimaryServerAddressna configuração (não no arquivo hosts) deve ser alterado do padrão 8.8.8.8para o que o host fornece. No VirtualBox, é isso 10.0.2.3.
31515 mightyiam
80

Para responder sua pergunta, você não pode usar caracteres curinga no arquivo hosts no Windows.

No entanto, se você quiser alterar apenas o arquivo hosts para fazer com que novos sites funcionem .... você pode configurar o seu Apache assim e não precisa continuar editando sua configuração:

http://postpostmodern.com/instructional/a-smarter-mamp/

Basicamente, um resumo rápido com base na minha configuração, adicione o seguinte ao seu arquivo apache.conf:

 LoadModule vhost_alias_module modules/mod_vhost_alias.so

 NameVirtualHost *:80

  <Directory "/xampp/sites">
      Options Indexes FollowSymLinks Includes ExecCGI
      AllowOverride All
      Order allow,deny
      Allow from all 
  </Directory>

  <VirtualHost *:80>
      VirtualDocumentRoot c:/xampp/sites/%-1/%-2+/
  </VirtualHost>

Isso me permite adicionar uma entrada como:

127.0.0.1       test.dev

e, em seguida, crie o diretório c: \ xampp \ sites \ dev \ test e coloque os arquivos necessários lá e simplesmente funcione.

A outra opção é usar <Directory>tags no apache.conf e referenciar as páginas em http: // localhost / project / .

jeremyasnyder
fonte
Você pode usar curingas no OSX?
Cjm2671
Sim, usando o Bind - clintberry.com/2011/…
Ryan Schumacher
30

Eu não acho que isso é possível.

De qualquer forma, você precisa modificar as entradas do apache virtualroot toda vez que adicionar um novo site e local, para que não seja um grande trabalho sincronizar o novo nome no arquivo vhost do Windows.

Atualização: verifique a próxima resposta e os comentários nesta resposta. Esta resposta tem 6 anos e não está mais correta.

Biri
fonte
3
Porém, ao usar o Nginx, não é necessário alterar o arquivo de configuração do Nginx para adicionar um novo grupo de domínios de segundo nível * .localhost. Portanto, é o arquivo menos de hosts.
19412 sergzach
8
Apenas para salientar que, quando você tem um site multilíngue, pode ter um <VirtualHost> com ServerAlias *.mydomain.localhost( *sendo o código do idioma), para não precisar editar o httpd.conf toda vez que adicionar um novo idioma; mas você ainda precisa adicionar o subdomínio ao arquivo hosts, daí a relevância da pergunta acima.
27712 Benjamin
10
Hosts virtuais dinâmicos são a palavra-chave aqui e são suportados pela maioria dos servidores, como Apache e Nginx. Então não, você definitivamente não precisa tocar na sua configuração do Apache toda vez que cria um projeto.
Valentin Klinghammer
2
Também podemos ter hosts virtuais curinga, isso hosts
depende
6

Para adicionar as ótimas sugestões já aqui, o XIP.IO é um servidor DNS curinga fantástico disponível publicamente.

      myproject.127.0.0.1.xip.io  -- resolves to -->   127.0.0.1
  other.project.127.0.0.1.xip.io  -- resolves to -->   127.0.0.1
   other.machine.10.0.0.1.xip.io  -- resolves to -->   10.0.0.1

(A capacidade de especificar endereços sem loopback é fantástica para testar sites em dispositivos iOS nos quais você não pode acessar um arquivo de hosts.)

Se você combinar isso com algumas das configurações do Apache mencionadas em outras respostas, poderá adicionar VirtualHosts com a configuração zero .

Simon East
fonte
E funciona para os membros da sua equipe no caso de um IP na sua LAN. Eles não precisam instalar um servidor DNS local com o mesmo arquivo de hosts.
Tobias Uhmann 12/07/19
4

Encontrei uma postagem sobre Como usar o arquivo Hosts do Windows que também diz "Não são permitidos curingas".

No passado, acabei de adicionar entradas adicionais ao arquivo hosts, porque (como dito anteriormente), não é muito trabalho extra quando você já está editando o arquivo de configuração do apache.

Kevin Hakanson
fonte
Quanto mais tempo você criar o arquivo hosts, mais demorará para resolver as solicitações. Não é uma boa solução se você tiver muitas entradas.
Cchamberlain
4

Editar o arquivo hosts é menos trabalhoso quando você executa "ipconfig / flushdns" no prompt de comando do Windows, em vez de reiniciar o computador.

Joe
fonte
1
não libera o cache de DNS do navegador, mas a janela. Portanto, ele precisa aguardar de 20 a 30 minutos para o navegador liberar o cache de DNS.
Jacob Melvad Jensen
3

Você pode convencer o administrador da rede a configurar um domínio para você (por exemplo, 'evilpuppetmaster.hell') e ter o curinga lá para que tudo (* .evilpuppetmaster.hell ') seja resolvido para o seu IP

Stu Thompson
fonte
1
Obrigado, mas este é um servidor doméstico de desenvolvimento, não há DNS ou administrador de rede disponível.
EvilPuppetMaster 26/09/08
OK, talvez você tenha acesso a um domínio ou conhece alguém que conhece? Por exemplo: * .evilpuppetmatser.arealdomain.com
Stu Thompson
Na verdade não. Mesmo assim, esta é uma máquina doméstica e, portanto, recebe um novo IP sempre que meu roteador se conecta à Internet. Um servidor DNS externo não ajudaria.
EvilPuppetMaster
1
1) Não há razão para que * .evilpuppetmatser.arealdomain.com não consiga resolver para 127.0.0.1, 2) não estou sugerindo um servidor DNS externo. Estou sugerindo que você use um subdomínio em um domínio real. Tecnicamente, qualquer pessoa pode resolver server.evp.arealdomain.com.
Stu Thompson
3
Existem também alguns públicos como * .127.0.0.1.xip.io e outros
Dave James Miller
3

Temos esse trabalho usando DNS curinga em nosso servidor DNS local: adicione um Aregistro algo como*.local -> 127.0.0.1

Eu acho que as configurações de rede precisarão ter o sufixo de domínio escolhido na lista de pesquisa de sufixos de domínio para máquinas na rede; portanto, convém substituir .localo domínio interno da sua empresa (por exemplo .int) e adicionar um subdomínio .localhost.intpara deixar claro para que serve

O que *.localhost.intseria resolvido 127.0.0.1para todos na rede, e as configurações do arquivo de configuração para todos os desenvolvedores "simplesmente funcionariam" se os terminais encerrassem o subdomínio site1.localhost.int, por exemplo , site2.localhost.inteste é o esquema que introduzimos.

O dnsmasq também parece bom, mas ainda não o tentei: http://ihaveabackup.net/2012/06/28/using-wildcards-in-the-hosts-file/

Matthew Skelton
fonte
2

Você pode experimentar o AngryHosts , que ofereceu uma maneira de oferecer suporte a curingas e expressões regulares. Na verdade, é um software de gerenciamento e aprimoramento de arquivos de hosts.
Mais recursos podem ser vistos em http://angryhosts.com/features/

iloahz
fonte
2

Estou usando o DNSChef para fazer isso.

https://thesprawl.org/projects/dnschef/

Você precisa baixar o aplicativo. No Linux ou Mac, você precisa de python para executá-lo. O Windows tem seu próprio exe.

Você deve criar um arquivo ini com suas entradas DNS, por exemplo

[A]
*.google.com=192.0.2.1
*.local=127.0.0.1
*.devServer1.com=192.0.2.3

Em seguida, você deve iniciar o aplicativo dns com privilégios de administrador

sudo python dnschef.py --file myfile.ini -q

ou no windows

runas dnschef.exe --file myfile.ini -q

Finalmente, você precisa configurar como seu único DNS o seu ambiente host local (rede, interface, dns ou similar ou no linux /etc/resolv.conf).

É isso aí

casivaagustin
fonte
2

Eu criei essa ferramenta simples para substituir os hosts. Expressões regulares são suportadas. https://github.com/stackia/DNSAgent

Uma configuração de amostra:

[
    {
        "Pattern": "^.*$",
        "NameServer": "8.8.8.8"
    },
    {
        "Pattern": "^(.*\\.googlevideo\\.com)|((.*\\.)?(youtube|ytimg)\\.com)$",
        "Address": "203.66.168.119"
    },
    {
        "Pattern": "^.*\\.cn$",
        "NameServer": "114.114.114.114"
    },
    {
        "Pattern": "baidu.com$",
        "Address": "127.0.0.1"
    }
]
Stackia
fonte
0

Não consegui encontrar uma proibição por escrito, mas, por convenção, o arquivo de hosts do Windows segue de perto o arquivo de hosts UNIX e você não pode colocar referências de nome curinga no nome do host.

Se você ler a página de manual, ela diz:

DESCRIPTION
     The hosts file contains information regarding the known hosts on the net-
     work.  For each host a single line should be present with the following
     information:

           Internet address
           Official host name
           Aliases

Embora diga,

     Host names may contain any printable character other than a field delim-
     iter, newline, or comment character.

isso não é verdade do nível prático.

Basicamente, o código que examina o arquivo / etc / hosts não suporta uma entrada curinga.

A solução alternativa é criar todas as entradas antecipadamente, talvez use um script para colocar algumas centenas de entradas de uma só vez.

benc
fonte
0

O @petah e o Acrylic DNS Proxy é a melhor resposta, e no final ele faz referência à capacidade de fazer vários sites usando um Apache que @jeremyasnyder descreve um pouco mais adiante ...

... no entanto, no nosso caso, estamos testando um sistema de hospedagem com vários inquilinos e, portanto, a maioria dos domínios que queremos testar é a mesma virtualhost, enquanto outros são direcionados a outros lugares.

Portanto, no nosso caso, você simplesmente usa caracteres curinga regex na ServerAliasdiretiva, assim ...

ServerAlias *.foo.local
oucil
fonte
0

Aqui está a configuração total para aqueles que tentam atingir a meta (curingas no ambiente de desenvolvimento, por exemplo, XAMPP - este exemplo assume todos os sites que apontam para a mesma base de código)

arquivo hosts (adicione uma entrada)

arquivo:% SystemRoot% \ system32 \ drivers \ etc \ hosts

127.0.0.1   example.local

Configuração httpd.conf (ativar vhosts)

arquivo: \ XAMPP \ etc \ httpd.conf

# Virtual hosts
Include etc\extra\httpd-vhosts.conf

Configuração httpd-vhosts.conf

arquivo: XAMPP \ etc \ extra \ httpd-vhosts.conf

<VirtualHost *:80>
    ServerAdmin [email protected]
    DocumentRoot "\path_to_XAMPP\htdocs"
    ServerName example.local
    ServerAlias *.example.local
#    SetEnv APP_ENVIRONMENT development
#    ErrorLog "logs\example.local-error_log"
#    CustomLog "logs\example.local-access_log" common
</VirtualHost>

reinicie o apache

crie um arquivo pac:

salve como o que quiser.pac onde quiser e, em seguida, carregue o arquivo na rede do navegador> proxy> configurações de configuração automática (recarregue se você alterar isso)

function FindProxyForURL(url, host) {
  if (shExpMatch(host, "*example.local")) {
    return "PROXY example.local";
  }
  return "DIRECT";
}
Daniel Jordi
fonte
Não funcionou, ainda não conhecia o PAC, mas esta linha 'return "PROXY example.local";' não retornaria um proxy ip: port a ser usado pelo navegador como proxy?
ion
0

Você pode usar echoipdns para isso ( https://github.com/zapty/echoipdns ).

Ao executar echoipdns local todas as solicitações de subdomínios .local são redirecionadas para 127.0.0.1, portanto, qualquer domínio com xyz.local etc será resolvido para 127.0.0.1. Você pode usar qualquer outro sufixo e também substituir local pelo nome desejado.

O Echoipdns é ainda mais poderoso, quando você deseja usar seu URL de outras máquinas na rede, ainda pode usá-lo com configuração zero.

Por exemplo, se o endereço IP da sua máquina for 192.168.1.100, você poderá agora usar um nome de domínio xyz.192-168-1-100.local que sempre será resolvido para 192.168.1.100. Essa mágica é feita pelos echoipdns, observando o endereço IP na segunda parte do nome de domínio e retornando o mesmo endereço IP na consulta DNS. Você precisará executar os ecos na máquina a partir da qual deseja acessar o sistema remoto.

O echoipdns também pode ser configurado como um proxy DNS autônomo; portanto, basta apontar para esse DNS, agora você pode usar todos os benefícios acima sem executar um comando especial todas as vezes, e até mesmo usá-lo em dispositivos móveis.

Então, basicamente, isso simplifica o desenvolvimento de DNS baseado em domínio curinga para o ambiente local e de equipe.

O echoipdns funciona em Mac, Linux e Windows.

NOTA: Eu sou autor de ecos.

arva
fonte
0

Configuração do subdomínio automático da configuração nginx com o Proxy DNS Acrílico

arquivo auto.conf para a pasta de sites nginx

server {
    listen 80;
    server_name ~^(?<branch>.*)\.example\.com;
    root /var/www/html/$branch/public;  

    index index.html index.htm index.php;

    charset utf-8;

    location / {
        try_files $uri $uri/ /index.php$is_args$args;
    }

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

    error_log  /var/log/nginx/$branch.error.log error;

    sendfile off;

    client_max_body_size 100m;

    location ~ \.php$ {
       try_files $uri /index.php =404;
       fastcgi_pass php-fpm:9000;
       fastcgi_index index.php;
       fastcgi_buffers 16 16k;
       fastcgi_buffer_size 32k;
       fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
       include fastcgi_params;
    }

    location ~ /\.ht {
        deny all;
    }
}

Adicione ao arquivo hosts Acrylic 127.0.0.1 example.com *.example.come reinicie o serviço Acrylic. $ ramo - seu nome de subdomínio.

Defina em vez de root / var / www / html / $ branch / public; o caminho do seu projeto

Davron Achilov
fonte
0

Isso pode ser feito usando o Pi-Hole , basta editar o "/ etc / hosts" e reiniciar o serviço DNS.

nano /etc/hosts
pihole restartdns

Exemplo:

127.0.1.1       raspberrypi
192.168.1.1     w1.dev.net
192.168.1.2     w2.dev.net
192.168.1.3     w3.dev.net
davidjimenez75
fonte
-1

Você pode usar um cliente DNS dinâmico, como http://www.no-ip.com . Em seguida, com um servidor DNS externo CNAME * .mydomain.com para mydomain.no-ip.com.


fonte
2
que iria resolver o seu IP externo e, normalmente, isso seria simplesmente trazer o seu roteador / modem Página de configuração
Sam
-1

Embora não seja possível adicionar um curinga como esse, você pode adicionar a lista completa de sites necessários, pelo menos para testes, que funcionam bem o suficiente para mim, no arquivo de hosts, basta adicionar:

127.0.0.1 site1.local
127.0.0.1 site2.local
127.0.0.1 site3.local
...

BlackTigerX
fonte
Eu acho que o pôster original está tentando evitar o aborrecimento desta etapa.
Simon East