Caractères génériques dans un fichier hôtes Windows
-
02-07-2019 - |
Question
Je souhaite configurer mon ordinateur de développement local de sorte que toutes les demandes de *.local
soient redirigées vers localhost
. L'idée est que, lorsque je développe plusieurs sites, je peux simplement ajouter des hôtes virtuels à Apache, appelés site1.local
, site2.local
etc., et les résoudre tous en c:\windows\system32\drivers\etc\hosts
, 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
vers mon <=> fichier, a également essayé:
127.0.0.1 .local
Aucune ne semble fonctionner.
Je sais que je peux les configurer pour différents numéros de port, mais cela pose un 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?
La solution
Acrylic DNS Proxy (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 Web officiel
http://mayakron.altervista.org/support/browse.php ? path = Acrylic & amp; name = Home
Configuration du proxy DNS acrylique
Pour configurer le proxy DNS acrylique, installez-le à partir du lien ci-dessus, puis accédez à:
- Démarrer
- Programmes
- Proxy DNS acrylique
- Config
- 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:
- Démarrer
- Programmes
- Proxy DNS Acrilic
- Config
- Redémarrer le service acrylique
Vous devrez également ajuster votre paramètre DNS dans vos paramètres d'interface réseau:
- Démarrer
- Panneau de configuration
- Réseau et Internet
- Connexions réseau
- Propriétés de connexion au réseau local
- TCP / IPv4
Définissez & "Utilisez 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 (avec VirtualDocumentRoot
), vous pouvez alors configurer automatiquement les hôtes de domaines / virtuels en créant simplement un répertoire.
Autres conseils
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 besoin de 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 dans 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 telle que:
127.0.0.1 test.dev
puis faites le répertoire c: \ xampp \ sites \ dev \ test et placez-y les fichiers nécessaires et cela fonctionnera.
L’autre option consiste à utiliser <Directory>
les balises dans apache.conf et à référencer les pages de http: // localhost / project /. .
Je ne pense pas que ce soit possible.
De toute façon, 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 lourde tâche.
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.
Pour ajouter aux excellentes suggestions déjà présentées ici, XIP.IO est un fantastique DNS générique. serveur 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 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 des hôtes virtuels avec zéro configuration .
J'ai trouvé un article sur Utiliser le fichier d'hôtes Hosts Windows qui indique également "Aucun caractère générique autorisé. &";
Auparavant, je venais d'ajouter les entrées supplémentaires au fichier hosts car, comme indiqué précédemment, cela ne représente pas beaucoup de travail supplémentaire lorsque vous modifiez déjà le fichier de configuration apache.
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.
Vous pouvez demander à votre administrateur réseau de vous configurer un domaine (par exemple, "evilpuppetmaster.hell") et de conserver le caractère générique afin que tout (* .evilpuppetmaster.hell ") soit corrigé en adresse IP
. Nous travaillons avec un DNS générique dans notre serveur DNS local: ajoutez un A
enregistrement similaire à *.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 ordinateurs du réseau. Vous voudrez peut-être remplacer .local
par le domaine interne de votre société (par exemple .int
) et puis ajoutez un sous-domaine tel que .localhost.int
pour préciser son rôle.
Ainsi, *.localhost.int
serait résolu en 127.0.0.1
pour tout le monde sur le réseau et les paramètres de configuration du fichier pour tous les développeurs & "; il suffit de travailler &"; si les noeuds finaux sont hors de ce sous-domaine, par exemple site1.localhost.int
, site2.localhost.int
C'est à peu près le schéma que nous avons mis en place.
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 /
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 & amp; Mac OS X, mais pas encore sous Windows.
Vous pouvez essayer AngryHosts , qui offre 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 d’amélioration et de gestion de fichiers hôtes.
Plus de fonctionnalités peuvent être consultées @ http://angryhosts.com/features/
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 fichier.
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 des fenêtres
runas dnschef.exe --file myfile.ini -q
Enfin, vous devez configurer comme seul DNS votre environnement hôte local (réseau, interface, DNS ou similaire, ou sous linux /etc/resolv.conf).
c'est tout
J'ai créé cet outil simple pour remplacer les hôtes. Les expressions régulières sont supportées. 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"
}
]
Je n'ai trouvé aucune 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, elle indique:
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.
En gros, le code qui regarde le fichier / etc / hosts ne prend pas en charge les entrées génériques.
La solution consiste à créer toutes les entrées à l’avance. Vous pouvez éventuellement utiliser un script pour placer quelques centaines d’entrée à la fois.
@petah and Acrylic DNS Proxy est la meilleure réponse. À la fin, il fait référence à la possibilité de créer plusieurs sites en utilisant 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 ainsi, la plupart des domaines que nous souhaitons tester vont au 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
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 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>
redémarrer apache
créer un fichier pac:
enregistrez-le sous le nom de fichier.pac où vous voulez, puis chargez le fichier dans le réseau du navigateur > proxy > paramètres de configuration automatique (rechargez-le si vous le modifiez)
function FindProxyForURL(url, host) {
if (shExpMatch(host, "*example.local")) {
return "PROXY example.local";
}
return "DIRECT";
}
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, ainsi tous les domaines avec xyz.local etc. seront résolus 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 zéro.
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 effectue cette magie en examinant l'adresse IP dans la deuxième partie du nom de domaine et en renvoyant la même adresse IP lors d'une requête DNS. Vous devrez exécuter les echoipdns 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, il vous suffit de pointer sur ce DNS pour profiter de tous les avantages susmentionnés sans exécuter à chaque fois une commande spéciale, et même à partir d'appareils mobiles.
Cela simplifie donc essentiellement le développement DNS basé sur le domaine générique pour les environnements locaux et d'équipe.
echoipdns fonctionne sur Mac, Linux et Windows.
REMARQUE: je suis l'auteur de echoipdns.
Configuration pour le sous-domaine nginx config auto avec un proxy DNS acrylique
Fichier auto.conf pour le dossier de vos 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;
}
}
Ajouter au fichier hôtes Acrylic 127.0.0.1 example.com *.example.com
et redémarrer le service Acrylic.
$ branch : nom de votre sous-domaine.
Définissez au lieu de racine / var / www / html / $ branch / public; votre chemin de projet
Vous pouvez utiliser un client DNS dynamique tel que http://www.no-ip.com Ensuite, avec un serveur DNS externe, CNAME * .mondomaine.com à mydomain.no-ip.com.
Bien que vous ne puissiez pas ajouter un caractère générique de ce type, vous pouvez ajouter la liste complète des sites dont vous avez besoin, du moins pour les tests, qui fonctionne assez bien pour moi. Dans votre fichier hosts, il vous suffit d'ajouter:
127.0.0.1 site1.local
127.0.0.1 site2.local
127.0.0.1 site3.local
...