Caractères génériques dans un fichier d'hôtes Windows

289

Je souhaite configurer ma machine de développement local afin que toutes les demandes *.localsoient redirigées vers localhost. L'idée est que lorsque je développe plusieurs sites, je peux simplement ajouter des vhosts à Apache appelés site1.local, site2.localetc., et les faire tous résoudre localhost, tandis qu'Apache dessert un site différent en conséquence.

Je suis sous Windows XP.

J'ai essayé d'ajouter

127.0.0.1       *.local

à mon c:\windows\system32\drivers\etc\hostsfichier, a également essayé:

127.0.0.1       .local

Aucun des deux ne semble fonctionner.

Je sais que je peux les configurer sur différents numéros de port, mais c'est pénible car il est difficile de se rappeler quel port est lequel.

Je ne veux pas avoir à configurer un serveur DNS local ou quoi que ce soit de dur, des suggestions?

EvilPuppetMaster
la source
1
N'hésitez pas à utiliser anysubdomain.reconn.co.uk comme solution de contournement (si vous êtes en ligne), qui pointera toujours vers votre hôte local (voir ma réponse ci-dessous).
Paul Grimshaw
Qu'en est-il d'un script qui analyse le nom de serveur Apache vhosts et met à jour le fichier hosts?
Elvis Ciotti
1
Je crois que * .local a une sémantique spéciale, et vous devriez utiliser quelque chose d'inexistant. J'utilise * .dev car je ne pense pas que ce soit réel.
WraithKenny

Réponses:

431

Acrylic DNS Proxy (gratuit, open source) fait le travail. Il crée un serveur DNS proxy (sur votre propre ordinateur) avec son propre fichier d'hôtes. Le fichier hosts accepte les caractères génériques.

Télécharger depuis le site officiel

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

Configuration du proxy DNS acrylique

Pour configurer le proxy DNS acrylique, installez-le à partir du lien ci-dessus, puis accédez à:

  1. Début
  2. Programmes
  3. Proxy DNS acrylique
  4. Config
  5. Modifier le fichier d'hôtes personnalisé (AcrylicHosts.txt)

Ajoutez les lignes suivantes à la fin du fichier:

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

Redémarrez le service de proxy DNS acrylique:

  1. Début
  2. Programmes
  3. Proxy DNS Acrilic
  4. Config
  5. Redémarrez le service acrylique

Vous devrez également ajuster votre paramètre DNS dans vos paramètres d'interface réseau:

  1. Début
  2. Panneau de configuration
  3. Réseau et Internet
  4. Les connexions de réseau
  5. Propriétés de connexion au réseau local
  6. TCP / IPv4

Définissez "Utiliser l'adresse de serveur DNS suivante":

Preferred DNS Server: 127.0.0.1

Si vous combinez ensuite cette réponse avec la réponse de jeremyasnyder (en utilisant VirtualDocumentRoot), vous pouvez alors configurer automatiquement les domaines / hôtes virtuels en créant simplement un répertoire.

Petah
la source
12
Juste pour être clair, le "fichier d'hôtes personnalisé" est AcrylicHosts.txt, pas AcrylicConfiguration.ini. Cela devrait peut-être être évident, mais cela m'a dérouté pendant un certain temps.
mhenry1384
@Petah - cette configuration exacte fonctionnait pour moi avec les domaines génériques, mais elle s'est juste arrêtée et je ne peux pas comprendre pourquoi. Toutes les demandes renvoient "Cette page n'est pas disponible". Redémarré Acryllic, réinitialiser tous les caches ... que pensez-vous que cela pourrait être d'autre?
SB2055
1
@ SB2055 vérifiez que vos paramètres DNS dans les propriétés de votre réseau sont toujours corrects.
Petah
Il convient de noter que l'acrylique n'est pas bien adapté aux situations où votre environnement réseau change fréquemment. Le serveur DNS public de Google ne résoudra pas les vrais noms de machines au sein de votre réseau ... et vous pouvez résoudre ce problème pour un réseau, mais vous ne pourrez toujours pas résoudre les noms de machines internes lorsque vous accédez à un autre réseau. Cela peut être particulièrement douloureux. Mais je dois également souligner que je ne sais pas tout ce qu'il y a à savoir sur l'acrylique.
Alex Dresko
Si cela se fait dans une machine virtuelle, alors PrimaryServerAddressdans la configuration (pas le fichier hosts) doit être changé de celui par défaut 8.8.8.8à celui fourni par l'hôte. Dans VirtualBox, c'est 10.0.2.3.
mightyiam
80

Pour répondre à votre question, vous ne pouvez pas utiliser de caractères génériques dans le fichier hosts sous Windows.

Cependant, si vous souhaitez uniquement modifier le fichier hosts pour faire fonctionner de nouveaux sites .... vous pouvez configurer votre Apache comme ceci et vous n'avez pas à continuer de modifier sa configuration:

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

Fondamentalement, un résumé rapide basé sur ma configuration, ajoutez ce qui suit à votre fichier 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>

Cela me permet d'ajouter une entrée comme:

127.0.0.1       test.dev

puis créez le répertoire, c: \ xampp \ sites \ dev \ test et placez-y les fichiers nécessaires et cela fonctionne.

L'autre option consiste à utiliser des <Directory>balises dans apache.conf et à référencer les pages de http: // localhost / project / .

jeremyasnyder
la source
Pouvez-vous utiliser des caractères génériques sur OSX?
cjm2671
Oui en utilisant Bind - clintberry.com/2011/…
Ryan Schumacher
30

Je ne pense pas que ce soit possible.

Vous devez de toute façon modifier les entrées d'apache virtualroot chaque fois que vous ajoutez un nouveau site et un nouvel emplacement, donc ce n'est pas un gros travail de synchroniser le nouveau nom dans le fichier vhost de Windows.

Mise à jour: veuillez vérifier la réponse suivante et les commentaires sur cette réponse. Cette réponse a 6 ans et n'est plus correcte.

Biri
la source
3
Mais lorsque vous utilisez Nginx, il n'est pas nécessaire de modifier le fichier de configuration de Nginx pour ajouter un nouveau groupe de domaines de deuxième niveau * .localhost. C'est donc le fichier moins des hôtes.
sergzach
8
Juste pour souligner que lorsque vous avez un site Web multilingue, vous pouvez avoir un <VirtualHost> avec ServerAlias *.mydomain.localhost( *étant le code de langue), de sorte que vous n'avez pas à modifier httpd.conf chaque fois que vous ajoutez une nouvelle langue; mais vous devez toujours ajouter le sous-domaine au fichier hosts, d'où la pertinence de la question ci-dessus.
Benjamin
10
Les hôtes virtuels dynamiques sont le mot clé ici et sont pris en charge par la plupart des serveurs, c'est-à-dire Apache et Nginx. Donc non, vous n'avez certainement pas besoin de toucher votre configuration Apache à chaque fois que vous créez un projet.
Valentin Klinghammer
2
Nous pouvons également avoir des hôtes virtuels génériques, ce n'est que dans le hostsfichier vraiment
ericn
6

Pour ajouter aux excellentes suggestions déjà ici, XIP.IO est un fantastique serveur DNS générique accessible au public.

      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é de spécifier des adresses sans boucle est fantastique pour tester des sites sur des appareils iOS où vous ne pouvez pas accéder à un fichier d'hôtes.)

Si vous combinez cela avec une partie de la configuration Apache mentionnée dans d'autres réponses, vous pouvez potentiellement ajouter des VirtualHosts sans aucune configuration .

Simon East
la source
Et cela fonctionne pour les membres de votre équipe en cas d'IP dans votre LAN. Ils n'ont pas besoin d'installer un serveur DNS local avec le même fichier d'hôtes.
Tobias Uhmann
4

J'ai trouvé une publication sur l' utilisation du fichier des hôtes Windows qui dit également "Aucun caractère générique n'est autorisé."

Dans le passé, je viens d'ajouter les entrées supplémentaires au fichier hosts, car (comme dit précédemment), ce n'est pas beaucoup de travail supplémentaire lorsque vous éditez déjà le fichier de configuration apache.

Kevin Hakanson
la source
Plus le fichier d'hôtes est long, plus il faudra de temps pour résoudre les demandes. Pas une bonne solution si vous avez beaucoup d'entrées.
cchamberlain
4

La modification du fichier hosts est moins pénible lorsque vous exécutez "ipconfig / flushdns" à partir de l'invite de commande Windows, au lieu de redémarrer votre ordinateur.

Joe
la source
1
il ne vide pas le cache DNS du navigateur, mais celui de la fenêtre. Il doit donc attendre 20 à 30 minutes pour que le navigateur libère la mise en cache DNS.
Jacob Melvad Jensen
3

Vous pouvez demander à votre administrateur réseau de configurer un domaine pour vous (par exemple, «evilpuppetmaster.hell») et d'y avoir le caractère générique afin que tout (* .evilpuppetmaster.hell ») soit résolu sur votre IP

Stu Thompson
la source
1
Merci mais c'est sur un devserver domestique, il n'y a pas d'administrateur DNS ou réseau disponible.
EvilPuppetMaster
OK, vous avez peut-être accès à un domaine ou connaissez quelqu'un qui le fait? Par exemple: * .evilpuppetmatser.arealdomain.com
Stu Thompson
Pas vraiment. Malgré tout, il s'agit d'une machine domestique, donc elle obtient une nouvelle IP chaque fois que mon routeur se connecte à Internet. Un serveur DNS externe n'aiderait pas.
EvilPuppetMaster
1
1) Il n'y a aucune raison * .evilpuppetmatser.arealdomain.com ne peut pas se résoudre en 127.0.0.1, 2) Je ne suggère pas un serveur DNS externe. Je suggère que vous utilisiez un sous-domaine sur un vrai domaine. Techniquement, tout le monde peut résoudre server.evp.arealdomain.com.
Stu Thompson
3
Il y a aussi des public comme * .127.0.0.1.xip.io et d' autres
Dave James Miller
3

Nous avons ce travail en utilisant le DNS générique dans notre serveur DNS local: ajoutez un Aenregistrement quelque chose comme*.local -> 127.0.0.1

Je pense que vos paramètres réseau devront avoir le suffixe de domaine choisi dans la liste de recherche de suffixe de domaine pour les machines sur le réseau, donc vous voudrez peut-être le remplacer .localpar le domaine interne de votre entreprise (par exemple .int), puis ajouter un sous-domaine comme .localhost.intpour le rendre clair à quoi ça sert.

Donc, *.localhost.intcela se résoudrait 127.0.0.1pour tout le monde sur le réseau, et les paramètres de fichier de configuration pour tous les développeurs "fonctionneraient" si les points de terminaison se bloquaient sur ce sous-domaine, par exemple site1.localhost.int, site2.localhost.intc'est à peu près le schéma que nous avons introduit.

dnsmasq a aussi l'air sympa, mais je ne l'ai pas encore essayé: http://ihaveabackup.net/2012/06/28/using-wildcards-in-the-hosts-file/

Matthew Skelton
la source
2

Vous pouvez essayer AngryHosts , qui a fourni un moyen de prendre en charge les caractères génériques et les expressions régulières. En fait, il s'agit d'un logiciel de gestion et d'amélioration des fichiers hôtes.
Plus de fonctionnalités peuvent être vues sur http://angryhosts.com/features/

iloahz
la source
2

J'utilise DNSChef pour cela.

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

Vous devez télécharger l'application, sous Linux ou Mac, vous avez besoin de python pour l'exécuter. Windows a son propre exe.

Vous devez créer un fichier ini avec vos entrées DNS, par exemple

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

Ensuite, vous devez lancer l'application DNS avec des privilèges d'administrateur

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

ou dans les fenêtres

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

Enfin, vous devez configurer comme votre seul DNS votre environnement hôte local (réseau, interface, DNS ou similaire ou dans linux /etc/resolv.conf).

C'est tout

casivaagustin
la source
2

J'ai fait cet outil simple pour remplacer les hôtes. Les expressions régulières sont prises en charge. https://github.com/stackia/DNSAgent

Un exemple de configuration:

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

Je n'ai pas pu trouver d'interdiction par écrit, mais par convention, le fichier des hôtes Windows suit de près le fichier des hôtes UNIX et vous ne pouvez pas mettre de références de nom d'hôte génériques dans ce fichier.

Si vous lisez la page de manuel, elle dit:

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

Bien qu'il le dise,

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

ce n'est pas vrai d'un point de vue pratique.

Fondamentalement, le code qui examine le fichier / etc / hosts ne prend pas en charge une entrée générique.

La solution de contournement consiste à créer toutes les entrées à l'avance, peut-être utiliser un script pour mettre quelques centaines d'entrées à la fois.

benc
la source
0

@petah et Acrylic DNS Proxy est la meilleure réponse, et à la fin il fait référence à la possibilité de faire du multi-site en utilisant un Apache que @jeremyasnyder décrit un peu plus loin ...

... cependant, dans notre cas, nous testons un système d'hébergement multi-locataires et la plupart des domaines que nous voulons tester vont donc de la même manière virtualhost, tandis que quelques autres sont dirigés ailleurs.

Donc, dans notre cas, vous utilisez simplement des caractères génériques regex dans la ServerAliasdirective, comme ça ...

ServerAlias *.foo.local
oucil
la source
0

Voici la configuration totale pour ceux qui tentent d'atteindre l'objectif (caractères génériques dans l'environnement de développement, c'est-à-dire XAMPP - cet exemple suppose que tous les sites pointent vers la même base de code)

fichier hôtes (ajouter une entrée)

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

127.0.0.1   example.local

Configuration httpd.conf (activer les vhosts)

fichier: \ XAMPP \ etc \ httpd.conf

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

Configuration de httpd-vhosts.conf

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

redémarrer apache

créer un fichier pac:

enregistrez-le sous n'importe quel fichier.pac où vous voulez, puis chargez le fichier dans le réseau du navigateur> proxy> paramètres de configuration automatique (rechargez si vous modifiez cela)

function FindProxyForURL(url, host) {
  if (shExpMatch(host, "*example.local")) {
    return "PROXY example.local";
  }
  return "DIRECT";
}
Daniel Jordi
la source
Cela n'a pas fonctionné, je ne connais pas encore le PAC mais cette ligne 'retourne "PROXY example.local";' ne retournerait pas un proxy ip: port à utiliser par le navigateur comme proxy?
ion
0

Vous pouvez utiliser echoipdns pour cela ( https://github.com/zapty/echoipdns ).

En exécutant echoipdns local toutes les demandes de sous-domaines .local sont redirigées vers 127.0.0.1, donc tout domaine avec xyz.local etc. sera résolu en 127.0.0.1. Vous pouvez utiliser n'importe quel autre suffixe et remplacer simplement local par le nom de votre choix.

Echoipdns est encore plus puissant, lorsque vous souhaitez utiliser votre URL à partir d'autres machines du réseau, vous pouvez toujours l'utiliser avec une configuration nulle.

Par exemple, si l'adresse IP de votre machine est 192.168.1.100, vous pouvez maintenant utiliser un nom de domaine xyz.192-168-1-100.local qui sera toujours résolu en 192.168.1.100. Cette magie est effectuée par les échos en regardant l'adresse IP dans la deuxième partie du nom de domaine et en renvoyant la même adresse IP sur la requête DNS. Vous devrez exécuter les échos numériques sur la machine à partir de laquelle vous souhaitez accéder au système distant.

echoipdns peut également être configuré en tant que proxy DNS autonome.Par conséquent, en pointant simplement ce DNS, vous pouvez désormais utiliser tous les avantages ci-dessus sans exécuter une commande spéciale à chaque fois, et vous pouvez même l'utiliser à partir d'appareils mobiles.

Donc, cela simplifie essentiellement le développement DNS basé sur le domaine générique pour l'environnement local et d'équipe.

echoipdns fonctionne sur Mac, Linux et Windows.

REMARQUE: je suis l'auteur d'échoipdns.

arva
la source
0

Configuration pour le sous-domaine automatique nginx config avec proxy DNS acrylique

fichier auto.conf pour votre dossier 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;
    }
}

Ajoutez au fichier des hôtes Acrylic 127.0.0.1 example.com *.example.comet redémarrez le service Acrylic. $ branch - votre nom de sous-domaine.

Définir à la place de root / var / www / html / $ branch / public; le chemin de votre projet

Davron Achilov
la source
0

Cela peut être fait en utilisant Pi-Hole , il suffit de modifier le "/ etc / hosts" et de redémarrer le service DNS.

nano /etc/hosts
pihole restartdns

Exemple:

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
la source
-1

Vous pouvez utiliser un client DNS dynamique tel que http://www.no-ip.com . Ensuite, avec un serveur DNS externe CNAME * .mydomain.com vers mydomain.no-ip.com.


la source
2
cela se résoudrait sur votre IP externe, et généralement cela ne ferait qu'amener votre page de configuration de routeur / modems
Sam
-1

Bien que vous ne puissiez pas ajouter un caractère générique comme celui-ci, vous pouvez ajouter la liste complète des sites dont vous avez besoin, au moins pour les tests, qui fonctionne assez bien pour moi, dans votre fichier hosts, vous ajoutez simplement:

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

BlackTigerX
la source
Je pense que l'affiche originale tente d'éviter les tracas de cette étape.
Simon East