Comodines en un archivo de hosts de Windows

289

Quiero configurar mi máquina de desarrollo local para que cualquier solicitud *.localsea ​​redirigida a localhost. La idea es que a medida que desarrollo múltiples sitios, solo puedo agregar vhosts a Apache llamado site1.local, site2.localetc., y hacer que todos resuelvan localhost, mientras que Apache sirve un sitio diferente en consecuencia.

Estoy en Windows XP.

Traté de agregar

127.0.0.1       *.local

a mi c:\windows\system32\drivers\etc\hostsarchivo, también probé:

127.0.0.1       .local

Ninguno de los cuales parece funcionar.

Sé que puedo configurarlos en diferentes números de puerto, pero eso es una molestia ya que es difícil recordar qué puerto es cuál.

No quiero tener que configurar un servidor DNS local ni nada difícil, ¿alguna sugerencia?

MalPuppetMaster
fuente
1
Siéntase libre de usar anysubdomain.reconn.co.uk como una solución alternativa (si está en línea), que siempre apuntará a su host local (consulte mi respuesta a continuación).
Paul Grimshaw
¿Qué pasa con un script que analiza el nombre de servidor apache vhosts y actualiza el archivo de hosts?
Elvis Ciotti
1
Creo que * .local tiene una semántica especial, y deberías usar algo inexistente. Uso * .dev ya que no creo que sea real.
WraithKenny

Respuestas:

431

El proxy DNS acrílico (gratuito, de código abierto) hace el trabajo. Crea un servidor DNS proxy (en su propia computadora) con su propio archivo de hosts. El archivo de hosts acepta comodines.

Descargar desde el sitio web oficial

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

Configuración del proxy DNS acrílico

Para configurar el Proxy DNS acrílico, instálelo desde el enlace anterior y luego vaya a:

  1. comienzo
  2. Programas
  3. Proxy DNS acrílico
  4. Config
  5. Editar archivo de hosts personalizados (AcrylicHosts.txt)

Agregue las siguientes líneas al final del archivo:

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

Reinicie el servicio Acrylic DNS Proxy:

  1. comienzo
  2. Programas
  3. Proxy DNS Acrilico
  4. Config
  5. Reiniciar el servicio de acrílico

También deberá ajustar su configuración de DNS en la configuración de su interfaz de red:

  1. comienzo
  2. Panel de control
  3. Redes e Internet
  4. Conexiones de red
  5. Propiedades de conexión de área local
  6. TCP / IPv4

Establezca "Usar la siguiente dirección del servidor DNS":

Preferred DNS Server: 127.0.0.1

Si luego combina esta respuesta con la respuesta de jeremyasnyder (usando VirtualDocumentRoot), puede configurar automáticamente dominios / hosts virtuales simplemente creando un directorio.

Petah
fuente
12
Para que quede claro, el "archivo de hosts personalizados" es AcrylicHosts.txt, no AcrylicConfiguration.ini. Tal vez eso debería ser obvio, pero me confundió por un tiempo.
mhenry1384
@Petah: esta configuración exacta estaba funcionando para mí con dominios comodín, pero simplemente se detuvo y no puedo entender por qué. Todas las solicitudes devuelven "Esta página no está disponible". Reiniciamos Acryllic, reiniciamos todos los cachés ... ¿qué más crees que podría ser?
SB2055
1
@ SB2055 compruebe que la configuración de DNS en las propiedades de su red sigue siendo correcta.
Petah
Cabe señalar que Acrylic no es adecuado para situaciones en las que su entorno de red cambia con frecuencia. El servidor DNS público de Google no resolverá los nombres reales de las máquinas dentro de su red ... y puede arreglar eso para una red, pero aún así no podrá resolver los nombres internos de las máquinas cuando vaya a otra red. Esto puede ser especialmente doloroso. Pero también debo señalar que no sé todo lo que hay que saber sobre el acrílico.
Alex Dresko
Si esto se hace dentro de una VM, entonces la PrimaryServerAddressconfiguración (no el archivo de hosts) debe cambiarse de la predeterminada 8.8.8.8a la que proporciona el host. En VirtualBox, esto es 10.0.2.3.
mightyiam
80

Para responder a su pregunta, no puede usar comodines en el archivo de hosts en Windows.

Sin embargo, si solo desea cambiar el archivo de hosts para que los nuevos sitios funcionen ... puede configurar su Apache de esta manera y no tiene que seguir editando su configuración:

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

Básicamente, un resumen rápido basado en mi configuración, agregue lo siguiente a su archivo 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>

Esto me permite agregar una entrada como:

127.0.0.1       test.dev

y luego haga el directorio, c: \ xampp \ sites \ dev \ test y coloque los archivos necesarios allí y simplemente funciona.

La otra opción es usar <Directory>etiquetas en apache.conf y hacer referencia a las páginas de http: // localhost / project / .

jeremyasnyder
fuente
¿Se pueden usar comodines en OSX?
cjm2671
Sí usando Bind - clintberry.com/2011/…
Ryan Schumacher
30

No creo que sea posible.

De todos modos, debe modificar las entradas de raíz virtual de apache cada vez que agrega un nuevo sitio y ubicación, por lo que no es un gran trabajo sincronizar el nuevo nombre con el archivo vhost de Windows.

Actualización: compruebe la siguiente respuesta y los comentarios sobre esta respuesta. Esta respuesta tiene 6 años y ya no es correcta.

Biri
fuente
3
Pero cuando se usa Nginx no es necesario cambiar el archivo de configuración de Nginx para agregar un nuevo grupo de dominios de segundo nivel * .localhost. Entonces, es el archivo menos de hosts.
sergzach
8
Solo para señalar que cuando tiene un sitio web multilingüe, puede tener un <VirtualHost> con ServerAlias *.mydomain.localhost( *siendo el código de idioma), de modo que no tenga que editar httpd.conf cada vez que agregue un nuevo idioma; pero aún necesita agregar el subdominio al archivo hosts, de ahí la relevancia de la pregunta anterior.
Benjamin
10
Los hosts virtuales dinámicos son la palabra clave aquí y son compatibles con la mayoría de los servidores, es decir, Apache y Nginx. Entonces no, definitivamente no tiene que tocar su configuración de Apache cada vez que crea un proyecto.
Valentin Klinghammer
2
También podemos tener hosts virtuales comodín, solo hosts
depende
6

Para agregar a las excelentes sugerencias que ya están aquí, XIP.IO es un fantástico servidor DNS comodín que está disponible públicamente.

      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

(La capacidad de especificar direcciones que no son de bucle invertido es fantástica para probar sitios en dispositivos iOS en los que no puede acceder a un archivo de hosts).

Si combina esto con alguna de las configuraciones de Apache mencionadas en otras respuestas, puede agregar VirtualHosts con configuración cero .

Simon East
fuente
Y funciona para los miembros de su equipo en caso de una IP en su LAN. No tienen que instalar un servidor DNS local con el mismo archivo de hosts.
Tobias Uhmann
4

Encontré una publicación sobre el uso del archivo de hosts de Windows que también dice "No se permiten comodines".

En el pasado, acabo de agregar las entradas adicionales al archivo hosts, porque (como se dijo anteriormente), no es mucho trabajo extra cuando ya está editando el archivo de configuración de apache.

Kevin Hakanson
fuente
Cuanto más tiempo haga el archivo de hosts, más tiempo tomará resolver las solicitudes. No es una buena solución si tienes muchas entradas.
cchamberlain
4

Editar el archivo hosts es menos complicado cuando ejecuta "ipconfig / flushdns" desde el símbolo del sistema de Windows, en lugar de reiniciar su computadora.

Joe
fuente
1
no descarga el caché dns del navegador, sino el de la ventana. Entonces tiene que esperar 20-30 minutos para que el navegador libere el almacenamiento en caché de dns.
Jacob Melvad Jensen el
3

Puede convencer a su administrador de red para que configure un dominio para usted (diga 'evilpuppetmaster.hell') y tenga el comodín allí para que todo (* .evilpuppetmaster.hell ') se resuelva en su IP

Stu Thompson
fuente
1
Gracias, pero esto está en un servidor de inicio, no hay DNS o administrador de red disponible.
EvilPuppetMaster
OK, ¿tal vez tienes acceso a un dominio o conoces a alguien que sí lo tiene? Por ejemplo: * .evilpuppetmatser.arealdomain.com
Stu Thompson
Realmente no. Aun así, esta es una máquina doméstica, por lo que obtiene una nueva IP cada vez que mi enrutador se conecta a Internet. Un servidor DNS externo no ayudaría.
EvilPuppetMaster
1
1) No hay ninguna razón * .evilpuppetmatser.arealdomain.com no puede resolver a 127.0.0.1, 2) No estoy sugiriendo un servidor DNS externo. Le sugiero que use un subdominio en un dominio real. Técnicamente, cualquiera puede resolver server.evp.arealdomain.com.
Stu Thompson
3
También hay algunos públicos como * .127.0.0.1.xip.io y otros
Dave James Miller
3

Tenemos esto funcionando usando DNS comodín en nuestro servidor DNS local: agregue un Aregistro similar a*.local -> 127.0.0.1

Creo que la configuración de su red necesitará tener el sufijo de dominio elegido en la lista de búsqueda de sufijos de dominio para máquinas en la red, por lo que es posible que desee reemplazarlo .localcon el dominio interno de su empresa (por ejemplo .int) y luego agregar un subdominio como .localhost.intpara que quede claro para que sirve

Por *.localhost.intlo tanto, se resolvería 127.0.0.1para todos en la red, y la configuración del archivo de configuración para todos los desarrolladores "simplemente funcionaría" si los puntos finales cuelgan de ese subdominio site1.localhost.int, por ejemplo , site2.localhost.inteste es más o menos el esquema que hemos introducido.

dnsmasq también se ve bien, pero aún no lo he probado: http://ihaveabackup.net/2012/06/28/using-wildcards-in-the-hosts-file/

Matthew Skelton
fuente
2

Puede probar AngryHosts , que proporcionó una forma de admitir comodines y expresiones regulares. En realidad, es un software de mejora y gestión de archivos de hosts.
Se pueden ver más funciones en http://angryhosts.com/features/

iloahz
fuente
2

Estoy usando DNSChef para hacer eso.

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

Tienes que descargar la aplicación, en Linux o Mac necesitas Python para ejecutarla. Windows tiene su propio exe.

Debe crear un archivo ini con sus entradas dns, por ejemplo

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

Luego debe iniciar la aplicación dns con privilegios de administrador

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

o en ventanas

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

Finalmente, necesita configurar como su único DNS su entorno de host local (red, interfaz, dns o similar o en linux /etc/resolv.conf).

Eso es

casivaagustin
fuente
2

Hice esta herramienta simple para tomar el lugar de los hosts. Se admiten expresiones regulares. https://github.com/stackia/DNSAgent

Una configuración de muestra:

[
    {
        "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
fuente
0

No pude encontrar una prohibición por escrito, pero por convención, el archivo de hosts de Windows sigue de cerca el archivo de hosts UNIX, y no puede poner referencias de nombre de host comodín en ese archivo.

Si lees la página del manual, dice:

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

Aunque sí dice:

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

eso no es cierto desde un nivel práctico.

Básicamente, el código que mira el archivo / etc / hosts no admite una entrada comodín.

La solución es crear todas las entradas de antemano, tal vez use un script para poner un par de cientos de entradas a la vez.

benc
fuente
0

@petah y Acrylic DNS Proxy es la mejor respuesta, y al final hace referencia a la capacidad de hacer sitios múltiples usando un Apache que @jeremyasnyder describe un poco más abajo ...

... sin embargo, en nuestro caso estamos probando un sistema de hospedaje multiinquilino y, por lo tanto, la mayoría de los dominios que queremos probar funcionan de la misma manera virtualhost, mientras que un par de otros se dirigen a otro lugar.

Entonces, en nuestro caso, simplemente usa comodines regex en la ServerAliasdirectiva, así ...

ServerAlias *.foo.local
oucil
fuente
0

Aquí está la configuración total para aquellos que intentan lograr el objetivo (comodines en el entorno de desarrollo, es decir, XAMPP; este ejemplo supone que todos los sitios apuntan a la misma base de código)

archivo de hosts (agregar una entrada)

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

127.0.0.1   example.local

Configuración de httpd.conf (habilitar vhosts)

archivo: \ XAMPP \ etc \ httpd.conf

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

Configuración de httpd-vhosts.conf

archivo: 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>

reiniciar apache

crear archivo pac:

guarde como whatever.pac donde quiera y luego cargue el archivo en la red del navegador> proxy> configuración de configuración automática (vuelva a cargar si lo modifica)

function FindProxyForURL(url, host) {
  if (shExpMatch(host, "*example.local")) {
    return "PROXY example.local";
  }
  return "DIRECT";
}
Daniel Jordi
fuente
No funcionó, todavía no sé sobre PAC, pero esta línea 'devuelve "PROXY example.local";' no devolvería un proxy ip: puerto para ser utilizado por el navegador como proxy?
ion
0

Puede usar echoipdns para esto ( https://github.com/zapty/echoipdns ).

Al ejecutar echoipdns local todas las solicitudes de subdominios .local se redirigen a 127.0.0.1, por lo que cualquier dominio con xyz.local, etc. se resolverá a 127.0.0.1. Puede usar cualquier otro sufijo, simplemente reemplace local con el nombre que desee.

Echoipdns es aún más poderoso, cuando desea usar su url de otras máquinas en la red, aún puede usarlo con configuración cero.

Por ejemplo, si la dirección IP de su máquina es 192.168.1.100, ahora puede usar un nombre de dominio xyz.192-168-1-100.local que siempre se resolverá en 192.168.1.100. Los echoipdns realizan esta magia mirando la dirección IP en la segunda parte del nombre de dominio y devolviendo la misma dirección IP en la consulta DNS. Tendrá que ejecutar los echoipdns en la máquina desde la que desea acceder al sistema remoto.

echoipdns también se puede configurar como un proxy DNS independiente, por lo que con solo apuntar a este DNS, ahora puede usar todos los beneficios anteriores sin ejecutar un comando especial cada vez, e incluso puede usarlo desde dispositivos móviles.

Esencialmente, esto simplifica el desarrollo de DNS basado en el dominio comodín para entornos locales y de equipo.

echoipdns funciona en Mac, Linux y Windows.

NOTA: Soy autor de echoipdns.

arva
fuente
0

Configuración para el subdominio de configuración nginx con Proxy DNS acrílico

archivo auto.conf para su carpeta de sitios 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;
    }
}

Agregue al archivo de hosts Acrylic 127.0.0.1 example.com *.example.comy reinicie el servicio Acrylic. $ branch : su nombre de subdominio.

Establecer en lugar de root / var / www / html / $ branch / public; la ruta de tu proyecto

Davron Achilov
fuente
0

Esto se puede hacer con Pi-Hole , solo edite "/ etc / hosts" y reinicie el servicio dns.

nano /etc/hosts
pihole restartdns

Ejemplo:

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
fuente
-1

Puede usar un cliente DNS dinámico como http://www.no-ip.com . Luego, con un servidor DNS externo CNAME * .mydomain.com a mydomain.no-ip.com.


fuente
2
eso resolvería su IP externa, y por lo general eso solo abriría la página de configuración de su enrutador / módems
Sam
-1

Si bien no puede agregar un comodín como ese, puede agregar la lista completa de sitios que necesita, al menos para las pruebas, que funciona lo suficientemente bien para mí, en su archivo de hosts, simplemente agrega:

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

BlackTigerX
fuente
Creo que el póster original está tratando de evitar la molestia de este paso.
Simon East