Duplicata possible:
Comment utiliser DNS pour rediriger le domaine vers un port spécifique sur mon serveur
Je veux inciter mon navigateur à aller sur localhost: 3000 au lieu de xyz.com. Je suis allé dans/etc/hosts sur OS X 10.5 et j'ai ajouté l'entrée suivante:
127.0.0.1:3000 xyz.com
Cela ne fonctionne pas, mais sans spécifier le port, l'astuce fonctionne. Existe-t-il un moyen de le faire en spécifiant le port?
Non, le fichier hosts est simplement un moyen de résoudre statiquement les noms quand aucun serveur DNS n'est présent.
Le fichier hosts est destiné à la résolution DNS. Le DNS résout les noms en adresses IP et n'a rien à voir avec les ports, je le crains. Vous devrez utiliser autre chose en conjonction avec le fichier hosts pour rediriger le port (Mangle l'en-tête TCP en modifiant le port de destination).
Avec iptables:
MAC OS utilise-t-il iptables/netfilter (je ne le pensais pas) ..? Si OS X utilise iptables, vous pouvez pointer xyz.com vers une adresse IP dans le fichier hosts comme 157.166.226.25 puis:
Sudo iptables -t nat -A OUTPUT -p tcp --dport 80 -d 157.166.226.25 -j DNAT --to-destination 127.0.0.1:3000
:-)
Vous n'avez pas besoin de spécifier un port dans le fichier hosts. faites simplement l'entrée comme vous l'avez fait en omettant le port, comme dans 127.0.0.1 xyz.com, cela vous dirigera vers votre hôte local, puis ajoutez simplement le port 3000 à la fin de votre URL ... http://xyz.com:30
En supposant que vous essayez d'intercepter http et non https, vous devrez écouter sur le port 80 sur votre machine locale, mais vous pourrez alors utiliser les fonctionnalités de redirection de port de ssh en ssh'ing vers localhost avec -L80:localhost:3000
, mais vous devrez le faire en tant que root.
Il serait probablement préférable d'avoir tout ce qui s'exécute sur le port 3000, écoutez simplement le port 80 à la place.
Si vous contrôlez le routeur entre vous et xyz.com, vous pourrez peut-être configurer une règle de redirection de port à la place.
La solution DNS pour cela consiste à utiliser des enregistrements SRV:
http://en.wikipedia.org/wiki/SRV_record
Il s'agit d'un moyen d'autoriser DNS, qui était à l'origine une base de données distribuée "nom à numéro" ou "numéro à nom" à inclure "point de terminaison nom à service", qui pourrait (éventuellement) inclure un protocole et un port.
La mauvaise nouvelle, c'est que les applications doivent être développées pour utiliser les enregistrements SRV, ce n'est donc pas une solution intégrée pour ce que vous essayez de faire.
Je pense que vous devez utiliser une sorte de serveur proxy ou peut-être quelque chose avec un logiciel de pare-feu pour rediriger les connexions de port ...
Chief-AG a raison en ce que le fichier hosts est utilisé pour résoudre statiquement les noms (la présence DNS n'est pas pertinente). Cependant, il peut y avoir une combinaison de choses que vous pourriez faire.
Semble être un peu de travail, mais cela accomplirait ce que vous demandez.
je suppose que c'est pour Rails développement? si c'est le cas, alors exécutez script/server -p 80 pour le faire fonctionner sur le port web standard. alors votre xyz.com fonctionnera
Comme alternative aux hôtes virtuels de;, vous pouvez créer un tunnel ssh à l'écoute sur le port 80 et à transférer vers localhost: 3000.
Si vous utilisez Apache comme serveur Web sur xyz.com, vous pouvez utiliser ProxyPass
d'Apache pour 'convertir' en un autre port.