web-dev-qa-db-fra.com

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

Je souhaite configurer ma machine de développement locale de sorte que toute demande de *.local soit redirigée vers localhost. L'idée est que, lorsque je développe plusieurs sites, je peux simplement ajouter vhosts à Apache appelé site1.local, site2.local etc., et les résoudre tous en localhost, pendant qu'Apache gère un site différent en conséquence.

Je suis sous Windows XP.

J'ai essayé d'ajouter 

127.0.0.1       *.local

dans mon fichier c:\windows\system32\drivers\etc\hosts, a également essayé:

127.0.0.1       .local

Ni qui semblent fonctionner.

Je sais que je peux les configurer sur différents numéros de port, mais cela me pose problème car il est difficile de se rappeler quel port correspond à quel port.

Je ne veux pas avoir à installer un serveur DNS local ou quelque chose de dur, des suggestions?

269
EvilPuppetMaster

Proxy DNS acrylique (gratuit, open source) fait le travail. Il crée un serveur proxy DNS (sur votre propre ordinateur) avec son propre fichier 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 rendez-vous à l'adresse:

  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 Proxy DNS acrylique:

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

Vous devrez également ajuster votre paramètre DNS dans les paramètres de votre interface réseau:

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

Set "Utiliser l'adresse du serveur DNS suivant":

Preferred DNS Server: 127.0.0.1

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

405
Petah

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 ne devez pas continuer à l'éditer, c'est config:

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

et ensuite faites le répertoire, c:\xampp\sites\dev\test et placez les fichiers nécessaires dedans et cela fonctionne.

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

79
jeremyasnyder

Je ne pense pas que c'est possible.

Quoi qu'il en soit, vous devez modifier les entrées de la racine virtuelle Apache chaque fois que vous ajoutez un nouveau site et un nouvel emplacement. Par conséquent, synchroniser le nouveau nom dans le fichier vhost de Windows n’est pas une tâche ardue.

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.

29
Biri

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.

4
Joe

Pour ajouter aux suggestions déjà faites ici, XIP.IO est un fantastique serveur DNS générique disponible publiquement.

      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 bouclage est fantastique pour tester des sites sur des périphériques iOS où vous ne pouvez pas accéder à un fichier hôtes.)

Si vous combinez cela avec certaines des configurations Apache mentionnées dans d'autres réponses, vous pouvez éventuellement ajouter VirtualHosts avec configuration zéro.

4
Simon East

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

Dans le passé, je venais d'ajouter les entrées supplémentaires au fichier hosts, car (comme indiqué précédemment), le travail supplémentaire que vous effectuez ne représente pas beaucoup de travail supplémentaire lorsque vous modifiez déjà le fichier de configuration Apache.

4
Kevin Hakanson

Nous travaillons avec des DNS génériques sur notre serveur DNS local: ajoutez un enregistrement A de type *.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 du réseau. Par conséquent, vous voudrez peut-être remplacer .local par le domaine interne de votre société (par exemple, .int), puis ajouter un sous-domaine tel que .localhost.int. expliquez clairement à quoi ça sert.

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

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

3
Matthew Skelton

Vous pouvez demander à votre administrateur réseau de vous configurer un domaine (par exemple, "evilpuppetmaster.hell") et d'y placer le caractère générique de sorte que tout (* .evilpuppetmaster.hell ") soit résolu en votre

3
Stu Thompson

J'ai écrit un proxy DNS simple en Python. Il lira les entrées génériques dans/etc/hosts. Voir ici: http://code.google.com/p/marlon-tools/source/browse/tools/dnsproxy/dnsproxy.py

J'ai testé sous Linux et Mac OS X, mais pas encore sous Windows.

2
marlonyao

J'ai créé cet outil simple pour remplacer des 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"
    }
]
2
Stackia

Vous pouvez essayer AngryHosts , qui fournit un moyen de prendre en charge les caractères génériques et les expressions rationnelles. En fait, il s’agit d’un logiciel d’amélioration et de gestion de fichiers hôtes.
On peut voir plus de fonctionnalités @ http://angryhosts.com/features/

2
iloahz

J'utilise DNSChef pour le faire.

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 les 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 seul DNS votre environnement d’hôte local (réseau, interface, DNS ou similaire ou sous linux /etc/resolv.conf).

C'est tout

2
casivaagustin

@petah et le proxy DNS acrylique sont la meilleure réponse, et à la fin, il fait référence à la possibilité de créer plusieurs sites à l'aide d'un Apache, ce que @jeremyasnyder décrit un peu plus bas ...

... cependant, dans notre cas, nous testons un système d'hébergement multi-locataires et donc les {la plupart} _ domaines que nous souhaitons tester vont à la même virtualhost, tandis que quelques autres sont dirigés ailleurs.

Donc, dans notre cas, vous utilisez simplement les caractères génériques regex dans la directive ServerAlias, comme suit ...

ServerAlias *.foo.local
0
oucil

Je ne pouvais pas trouver d'interdiction par écrit, mais par convention, le fichier d'hôtes Windows suit de près le fichier d'hôtes UNIX et vous ne pouvez pas y insérer de références génériques de nom d'hôte.

Si vous lisez la page de manuel, vous pourrez lire:

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 soit dit,

     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 regarde le fichier/etc/hosts ne prend pas en charge une entrée générique.

La solution consiste à créer toutes les entrées à l’avance. Vous pouvez éventuellement utiliser un script pour placer quelques centaines d’entrées à la fois.

0
benc

Configuration pour le sous-domaine automatique nginx config avec un 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 hôtes acrylique 127.0.0.1 example.com *.example.com et redémarrez le service acrylique . $ branch - votre nom de sous-domaine.

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

0
Davron Achilov

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

fichier hosts (ajouter une entrée)

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

127.0.0.1   example.local

configuration de httpd.conf (enable 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 le nom que vous voulez.pac où vous voulez, puis chargez le fichier dans le réseau> le proxy du navigateur> les paramètres d'auto-configuration (rechargez-le si vous le modifiez)

function FindProxyForURL(url, Host) {
  if (shExpMatch(Host, "*example.local")) {
    return "PROXY example.local";
  }
  return "DIRECT";
}
0
Daniel Jordi

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, de sorte que 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 depuis d'autres ordinateurs en réseau, vous pouvez toujours l'utiliser sans configuration. 

Par exemple Si l'adresse IP de votre machine est 192.168.1.100, vous pouvez désormais utiliser un nom de domaine xyz.192-168-1-100.local, qui sera toujours résolu en 192.168.1.100. Echoipdns fait cette magie en regardant l'adresse IP dans la deuxième partie du nom de domaine et en retournant la même adresse IP sur une requête DNS. Vous devrez exécuter les echoipdns sur la machine à partir de laquelle vous souhaitez accéder au système distant.

les echoipdns peuvent également être configurés en tant que proxy DNS autonome. Par conséquent, il vous suffit de désigner ce DNS pour profiter de tous les avantages décrits ci-dessus sans exécuter à chaque fois une commande spéciale. 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 un environnement local ou d'équipe.

echoipdns fonctionne sur Mac, Linux et Windows.

NOTE: je suis auteur pour echoipdns.

0
arva