web-dev-qa-db-fra.com

Dans mon fichier / etc / hosts / sous Linux / OSX, comment puis-je créer un sous-domaine générique?

J'ai besoin de tester des sous-domaines sur mon hôte local. Comment puis-je obtenir ce résultat en ajoutant *.localhost.com à mon /etc/hosts/ fichier?

Si ce n'est pas possible, comment contourner ce problème? J'ai besoin de tester des sous-domaines génériques sur mon serveur local. C'est un Django devserver, le serveur de développement Django dev peut-il gérer les sous-domaines? Un autre logiciel/routage peut-il me donner le résultat final que je veux ?

181
MikeN

J'ai écrit un proxy DNS en Python. Il lira les entrées génériques dans/etc/hosts. Voir ici: https://github.com/hubdotcom/marlon-tools/blob/master/tools/dnsproxy/dnsproxy.py

45
marlonyao

Installer dnsmasq (je le fais sur tous mes bureaux Linux comme cache DNS de toute façon). Dans dnsmasq.conf ajoutez la ligne:

address=/localhost.com/127.0.0.1
160
tomchuk

Il n'est pas possible de spécifier des caractères génériques dans le /etc/hosts fichier. Spécifiez explicitement les noms d'hôte requis ou configurez un serveur de noms local avec les règles appropriées.

65
ar.

Vous devez configurer un serveur DNS et demander à chaque client de l'utiliser pour la résolution. Le serveur lui-même peut être aussi "léger" que dnsmasq ou aussi lourd que BIND .

15
Gerald Combs

Workflow simple (pas besoin d'installer quoi que ce soit)

Personnellement, j'aime créer un fichier PAC pour cela et faire en sorte que mon navigateur l'utilise.

Étape 1: créez un fichier par exemple: *.proxy.pac* quelque part (j'utilise mon $home dossier)

Étape 2: collez ce code (l'exemple est avec le port 8000):

function FindProxyForURL(url, Host) {
  if (shExpMatch(Host, "*localhost")) {
    return "PROXY localhost:8000";
  }
  return "DIRECT";
}

Étape 3 : faites en sorte que votre navigateur utilise ce fichier PAC.

Vidéo Youtube pour PAC et Firefox

Étape 4 : Vous pouvez maintenant tester votre application en accédant à: http://mysubdomain.localhost/

Étape 5: Profitez :)

11
Bijan

J'ai rangé un de mes vieux projets:

https://github.com/airtonix/avahi-aliases

exigences:

  • linux où avahi et python-avahi sont installables
  • vous êtes d'accord avec les domaines .local (avahi ne supporte aucun autre type)

Avantages par rapport à l'utilisation de dnsmasq ou du proxy python dns:

  • d'autres utilisateurs avahi/bonjour sur votre réseau local peuvent résoudre les alias que vous créez et annoncez au réseau (à condition que vous autorisiez l'accès au port 5353)
5
airtonix

Vous ne pouvez pas utiliser de caractère générique dans /etc/hosts.

Jetez un œil ici pour une bonne procédure pas à pas sur la façon d'accomplir sur OS X en utilisant BIND, le serveur DNS intégré mais inactif, et Apache.

4
Trevor

Cette solution basée sur DNS fonctionnait parfaitement dans mon cas, sans avoir besoin d'installer quoi que ce soit: https://Gist.github.com/fedir/04e60d679d5657d1f9f9aa10b3168282 (Mac OSX 10.9)

4
Fedir RYKHTIK

Si vous voulez utiliser dnsmasq avec NetworkManager vous pouvez (ou même devez?) Démarrer dnsmasq à partir de NetworkManager en ajoutant

dns=dnsmasq

à /etc/NetworkManager/NetworkManager.conf. Ensuite, la configuration dnsmasq passe à /etc/NetworkManager/dnsmasq.conf ou /etc/NetworkManager/dnsmasq.d/ resp.

3
TNT

Une tâche courante pour ce sujet consiste à mapper des répertoires à des sous-domaines. Un moyen très simple pour cela consiste à ajouter automatiquement les entrées basées sur le répertoire au fichier hosts:

#!/usr/bin/python 
 
 import os 
 
 hostsFile = open ("/ etc/hosts", "a +"); 
 
 lines = hostsFile.readlines () 
 
 for fileName in os.listdir ('/ opt/subdomainDirs'): 
 
 entryExists = False 
 Pour la ligne en lignes: 
 Si fileName en ligne: 
 EntryExists = True 
 
 Sinon entryExists: 
 HostsFile. write ("127.0.0.1" + fileName + ".localhost\n"); 
2
Lukas Glowania

dnsmasq a fonctionné pour moi, sauf que j'ai dû faire quelques étapes supplémentaires.

Voici la procédure complète:

  1. Prepend /etc/resolv.conf avec la ligne suivante

    nameserver 127.0.0.1
    
  2. Ajoutez les lignes suivantes à /etc/dnsmasq.conf

    listen-address=127.0.0.1
    address=/localhost.localdomain/127.0.0.1
    address=/localhost/127.0.0.1
    
  3. Redémarrez dnsmasq

2
jbangerter

Réponse courte:

Votre fichier/etc/hosts/ne vous permettra pas d'utiliser des caractères génériques ou des numéros de port. Vous devrez créer une entrée pour chacun de vos sous-domaines

2
Marcos Placona

La réponse courte est non. La réponse la plus longue est que vous devez être plus clair sur ce que vous désirez réellement réaliser, car il y a peut-être une meilleure façon et une autre façon de le faire.

Pour l'hébergement Web (je ne l'ai jamais vu utilisé autrement), cela se fait en DNS en combinaison avec un serveur Web compatible avec l'hébergement virtuel. Pour plus d'informations sur enregistrements DNS génériques (Wikipedia), et un article hébergement générique avec Apache et Bind pour Linux utilisant bind et Apache.

Au pire, vous pourriez utiliser un serveur DNS local, je suppose.

2
mctylr

Merci tschundeee pour ce que je considère comme la réponse ultime à ce problème, j'aimerais simplement commenter, mais voici la configuration totale pour ceux qui essaient d'atteindre l'objectif initial (les caractères génériques pointent tous vers le même code - n'installez rien, environnement de développement, c.-à-d. , XAMPP)

fichier hôtes (ajouter une entrée)

fichier:/etc/hosts (non-windows)

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";
}
2
Daniel Jordi