Caratteri jolly in un file host di Windows


289

Voglio configurare la mia macchina di sviluppo locale in modo che tutte le richieste *.localvengano reindirizzate a localhost. L'idea è che mentre sviluppo più siti, posso semplicemente aggiungere vhosts ad Apache chiamati site1.local, site2.localecc. E farli risolvere tutti localhost, mentre Apache serve di conseguenza un sito diverso.

Sono su Windows XP.

Ho provato ad aggiungere

127.0.0.1       *.local

nel mio c:\windows\system32\drivers\etc\hostsfile, ho anche provato:

127.0.0.1       .local

Nessuno dei due sembra funzionare.

So di poterli impostare su diversi numeri di porta, ma questo è un dolore poiché è difficile ricordare quale porta sia quale.

Non voglio dover installare un server DNS locale o qualcosa di difficile, qualche suggerimento?


1
Sentiti libero di utilizzare anysubdomain.reconn.co.uk come soluzione (se sei online), che indicherà sempre il tuo host locale (vedi la mia risposta di seguito).
Paul Grimshaw,

che dire di uno script che analizza Apache vhosts ServerName e aggiorna il file hosts?
Elvis Ciotti,

1
Credo che * .local abbia una semantica speciale e dovresti usare qualcosa di inesistente. Uso * .dev poiché non credo sia reale.
WraithKenny,

Risposte:


431

Il proxy DNS acrilico (gratuito, open source) fa il lavoro. Crea un server DNS proxy (sul tuo computer) con il suo file host. Il file hosts accetta caratteri jolly.

Scarica dal sito Web ufficiale

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

Configurazione del proxy DNS acrilico

Per configurare il proxy DNS acrilico, installalo dal link sopra, quindi vai a:

  1. Inizio
  2. programmi
  3. Proxy DNS acrilico
  4. config
  5. Modifica file host personalizzato (AcrylicHosts.txt)

Aggiungi le seguenti righe alla fine del file:

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

Riavvia il servizio proxy DNS acrilico:

  1. Inizio
  2. programmi
  3. Proxy DNS acrilico
  4. config
  5. Riavvia il servizio acrilico

Sarà inoltre necessario regolare le impostazioni DNS nelle impostazioni dell'interfaccia di rete:

  1. Inizio
  2. Pannello di controllo
  3. Network e internet
  4. Le connessioni di rete
  5. Proprietà di connessione alla rete locale
  6. TCP / IPv4

Impostare "Utilizza il seguente indirizzo server DNS":

Preferred DNS Server: 127.0.0.1

Se poi combini questa risposta con la risposta di jeremyasnyder (usando VirtualDocumentRoot), puoi quindi impostare automaticamente domini / host virtuali semplicemente creando una directory.


12
Per essere chiari, il "file hosts personalizzato" è AcrylicHosts.txt, non AcrylicConfiguration.ini. Forse dovrebbe essere ovvio, ma mi ha confuso per un po '.
mhenry1384,

@Petah - questa configurazione esatta funzionava per me con domini jolly, ma si è appena fermata e non riesco a capire perché. Tutte le richieste restituiscono "Questa pagina non è disponibile". Riavviato Acryllic, ripristina tutte le cache ... cos'altro pensi che potrebbe essere?
SB2055,

1
@ SB2055 controlla che le tue impostazioni DNS nelle proprietà della tua rete siano ancora corrette.
Petah,

Va notato che l'acrilico non è adatto a situazioni in cui l'ambiente di rete cambia frequentemente. Il server DNS pubblico di Google non risolverà i nomi di macchine reali all'interno della tua rete ... e puoi risolverlo per una rete, ma non sarai ancora in grado di risolvere i nomi di macchine interne quando vai su un'altra rete. Questo può essere particolarmente doloroso. Ma dovrei anche sottolineare che non so tutto quello che c'è da sapere sull'acrilico.
Alex Dresko,

Se ciò avviene all'interno di una VM, allora PrimaryServerAddressnella configurazione (non nel file hosts) dovrebbe essere cambiato da quello predefinito 8.8.8.8fornito dall'host. In VirtualBox, questo è 10.0.2.3.
mightyiam

80

Per rispondere alla tua domanda, non puoi utilizzare i caratteri jolly nel file hosts in Windows.

Tuttavia, se si desidera modificare il file hosts solo per far funzionare i nuovi siti .... è possibile configurare Apache in questo modo e non è necessario continuare a modificarne la configurazione:

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

Fondamentalmente un breve riepilogo basato sulla mia configurazione, aggiungi quanto segue al tuo file 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>

Questo mi permette di aggiungere una voce come:

127.0.0.1       test.dev

e quindi crea la directory, c: \ xampp \ sites \ dev \ test e inserisci i file necessari e funziona.

L'altra opzione è usare i <Directory>tag in apache.conf e fare riferimento alle pagine da http: // localhost / project / .


Puoi usare i caratteri jolly su OSX?
cjm2671,


30

Non penso che sia possibile.

Devi comunque modificare le voci di virtualroot di apache ogni volta che aggiungi un nuovo sito e una nuova posizione, quindi non è un grosso lavoro sincronizzare il nuovo nome nel file vhost di Windows.

Aggiornamento: controlla la risposta successiva e i commenti su questa risposta. Questa risposta ha 6 anni e non è più corretta.


3
Ma quando si utilizza Nginx non è necessario modificare il file di configurazione di Nginx per aggiungere un nuovo gruppo di domini di secondo livello * .localhost. Quindi, è il meno del file hosts.
sergzach,

8
Solo per sottolineare che quando si dispone di un sito Web multilingue, è possibile avere un <VirtualHost> con ServerAlias *.mydomain.localhost( *essendo il codice della lingua), in modo da non dover modificare httpd.conf ogni volta che si aggiunge una nuova lingua; ma devi comunque aggiungere il sottodominio al file hosts, quindi la pertinenza della domanda sopra.
Benjamin,

10
Gli host virtuali dinamici sono la parola chiave qui e sono supportati dalla maggior parte dei server, ovvero Apache e Nginx. Quindi no, sicuramente non devi toccare la tua configurazione di Apache ogni volta che crei un progetto.
Valentin Klinghammer,

2
Possiamo avere anche host virtuali jolly, hosts
dipende

6

Per aggiungere ai fantastici suggerimenti già qui, XIP.IO è un fantastico server DNS jolly disponibile pubblicamente.

      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 possibilità di specificare indirizzi non loopback è fantastica per testare siti su dispositivi iOS in cui non è possibile accedere a un file host.)

Se lo combini con alcune delle configurazioni di Apache menzionate in altre risposte, puoi potenzialmente aggiungere VirtualHosts con zero impostazioni .


E funziona per i membri del tuo team in caso di un IP nella tua LAN. Non devono installare un server DNS locale con lo stesso file host.
Tobias Uhmann,

4

Ho trovato un post sull'utilizzo del file Hosts di Windows che dice anche "Non sono ammessi caratteri jolly".

In passato, ho appena aggiunto le voci aggiuntive al file hosts, perché (come detto in precedenza), non è molto lavoro extra quando si sta già modificando il file di configurazione di Apache.


Più tempo rendi il file hosts, più tempo ci vorrà per risolvere le richieste. Non è una buona soluzione se hai molte voci.
cchamberlain,

4

Modificare il file hosts è meno complicato quando si esegue "ipconfig / flushdns" dal prompt dei comandi di Windows, invece di riavviare il computer.


1
non svuota la cache DNS del browser, ma quella di Windows. Quindi deve attendere 20-30 minuti affinché il browser rilasci la cache DNS.
Jacob Melvad Jensen,

3

Potresti chiedere al tuo amministratore di rete di impostare un dominio per te (ad esempio "evilpuppetmaster.hell") e di avere il jolly in modo che tutto (* .evilpuppetmaster.hell ") si risolva nel tuo IP


1
Grazie, ma questo è su un devserver di casa, non è disponibile alcun amministratore DNS o di rete.
EvilPuppetMaster,

OK, forse hai accesso a un dominio o conosci qualcuno che lo fa? Ad esempio: * .evilpuppetmatser.arealdomain.com
Stu Thompson,

Non proprio. Anche così, questa è una macchina domestica in modo che ottenga un nuovo IP ogni volta che il mio router si collega a Internet. Un server DNS esterno non sarebbe d'aiuto.
EvilPuppetMaster,

1
1) Non vi è alcun motivo * .evilpuppetmatser.arealdomain.com non può essere risolto in 127.0.0.1, 2) Non sto suggerendo un server DNS esterno. Sto suggerendo di utilizzare un sottodominio su un dominio reale. Tecnicamente, chiunque può risolvere server.evp.arealdomain.com.
Stu Thompson,

3
Ce ne sono anche alcuni pubblici come * .127.0.0.1.xip.io e altri
Dave James Miller,

3

Funzioniamo utilizzando DNS jolly nel nostro server DNS locale: aggiungi un A record in qualche modo*.local -> 127.0.0.1

Penso che le tue impostazioni di rete dovranno avere il suffisso di dominio scelto nell'elenco di ricerca del suffisso di dominio per le macchine in rete, quindi potresti voler sostituire .localcon il dominio interno della tua azienda (ad esempio .int) e quindi aggiungere un sottodominio come.localhost.int per chiarirlo a cosa serve.

Quindi *.localhost.intrisolverei 127.0.0.1per tutti gli utenti della rete e le impostazioni del file di configurazione per tutti gli sviluppatori "funzionerebbero" se gli endpoint si bloccassero su quel sottodominio site1.localhost.int, ad es .site2.localhost.int Questo è praticamente lo schema che abbiamo introdotto.

Anche dnsmasq sembra carino, ma non l'ho ancora provato: http://ihaveabackup.net/2012/06/28/using-wildcards-in-the-hosts-file/



2

Puoi provare AngryHosts , che ha fornito un modo per supportare i caratteri jolly e l'espressione regolare. In realtà, è un software di gestione e miglioramento dei file host.
Altre funzionalità sono disponibili su http://angryhosts.com/features/


2

Sto usando DNSChef per farlo.

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

Devi scaricare l'app, su Linux o Mac hai bisogno di Python per eseguirla. Windows ha il suo exe.

È necessario creare un file ini con le voci dns, ad esempio

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

Quindi è necessario avviare l'applicazione DNS con i privilegi di amministratore

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

o in windows

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

Infine, devi impostare come unico DNS il tuo ambiente host locale (rete, interfaccia, dns o simili o in linux /etc/resolv.conf).

Questo è tutto


2

Ho creato questo semplice strumento per sostituire gli host. Le espressioni regolari sono supportate. https://github.com/stackia/DNSAgent

Una configurazione di esempio:

[
    {
        "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"
    }
]

0

Non è stato possibile trovare un divieto per iscritto, ma per convenzione, il file hosts di Windows segue da vicino il file hosts UNIX e non è possibile inserire riferimenti a nome host con caratteri jolly in quel file.

Se leggi la pagina man, 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

Anche se dice

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

questo non è vero a livello pratico.

Fondamentalmente, il codice che esamina il file / etc / hosts non supporta una voce jolly.

La soluzione è creare in anticipo tutte le voci, magari usare uno script per inserire duecento voci contemporaneamente.


0

@petah and Acrylic DNS Proxy è la risposta migliore e alla fine fa riferimento alla possibilità di fare più siti usando un Apache che @jeremyasnyder descrive un po 'più in basso ...

... tuttavia, nel nostro caso stiamo testando un sistema di hosting multi-tenant e quindi la maggior parte dei domini che vogliamo testare vanno allo stesso virtualhost, mentre un paio di altri sono diretti altrove.

Quindi, nel nostro caso, usi semplicemente i jolly regex nella ServerAliasdirettiva, in questo modo ...

ServerAlias *.foo.local

0

Ecco la configurazione totale per coloro che cercano di raggiungere l'obiettivo (caratteri jolly nell'ambiente di sviluppo, ad esempio XAMPP - questo esempio presuppone che tutti i siti puntino alla stessa base di codice)

file hosts (aggiungi una voce)

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

127.0.0.1   example.local

configurazione httpd.conf (abilita vhosts)

file: \ XAMPP \ etc \ httpd.conf

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

configurazione httpd-vhosts.conf

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

<VirtualHost *:80>
    ServerAdmin admin@example.local
    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>

riavvia apache

crea file pac:

salva come whatever.pac dove vuoi e quindi carica il file nella rete del browser> proxy> impostazioni auto_configuration (ricarica se lo modifichi)

function FindProxyForURL(url, host) {
  if (shExpMatch(host, "*example.local")) {
    return "PROXY example.local";
  }
  return "DIRECT";
}

Non ha funzionato, non conosco ancora PAC ma questa riga 'return "PROXY example.local";' non restituirebbe un proxy ip: porta per essere utilizzata dal browser come proxy?
ion

0

Per questo puoi usare echoipdns ( https://github.com/zapty/echoipdns ).

Eseguendo echoipdns local tutte le richieste per i sottodomini .local vengono reindirizzati a 127.0.0.1, quindi qualsiasi dominio con xyz.local ecc si risolverà in 127.0.0.1. È possibile utilizzare qualsiasi altro suffisso anche semplicemente sostituire locale con il nome desiderato.

Echoipdns è ancora più potente, quando vuoi usare il tuo url da altre macchine in rete puoi comunque usarlo con configurazione zero.

Ad esempio, se l'indirizzo IP della macchina è 192.168.1.100 ora è possibile utilizzare un nome di dominio xyz.192-168-1-100.local che si risolverà sempre in 192.168.1.100. Questa magia viene fatta dagli echoipdns guardando l'indirizzo IP nella seconda parte del nome di dominio e restituendo lo stesso indirizzo IP sulla query DNS. Dovrai eseguire gli echoipdns sulla macchina da cui vuoi accedere al sistema remoto.

echoipdns può anche essere configurato come proxy DNS autonomo, quindi puntando semplicemente su questo DNS, ora puoi utilizzare tutti i vantaggi di cui sopra senza eseguire un comando speciale ogni volta e puoi persino utilizzarlo da dispositivi mobili.

Quindi, in sostanza, questo semplifica lo sviluppo DNS basato su dominio jolly per ambiente locale e team.

echoipdns funziona su Mac, Linux e Windows.

NOTA: sono autore di echoipdns.


0

Configurazione per il sottodominio automatico di configurazione nginx con proxy DNS acrilico

file auto.conf per la cartella dei siti 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;
    }
}

Aggiungi al file hosts Acrylic 127.0.0.1 example.com *.example.come riavvia il servizio Acrylic. $ branch - il tuo nome di sottodominio.

Imposta invece di root / var / www / html / $ branch / public; il percorso del tuo progetto


0

Questo può essere fatto usando Pi-Hole , basta modificare "/ etc / hosts" e riavviare il servizio dns.

nano /etc/hosts
pihole restartdns

Esempio:

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

-1

È possibile utilizzare un client DNS dinamico come http://www.no-ip.com . Quindi, con un server DNS esterno CNAME * .mydomain.com su mydomain.no-ip.com.


2
che si risolverebbe sul tuo IP esterno, e di solito ciò farebbe apparire la tua pagina di configurazione del tuo router / modem
Sam

-1

Sebbene non sia possibile aggiungere un carattere jolly come quello, è possibile aggiungere l'elenco completo dei siti necessari, almeno per i test, che funziona abbastanza bene per me, nel file hosts, è sufficiente aggiungere:

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


Penso che il poster originale stia tentando di evitare il fastidio di questo passaggio.
Simon East,
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.