Возможный дубликат:
Как использовать DNS для перенаправления домена на определенный порт на моем сервере
Я хочу обманом заставить свой браузер перейти на localhost: 3000 вместо xyz.com. Я зашел в / etc / hosts в OS X 10.5 и добавил следующую запись:
127.0.0.1:3000 xyz.com
Это не работает, но без указания порта уловка работает. Есть ли способ сделать это, указав порт?
Нет, файл hosts - это просто способ статического разрешения имен при отсутствии DNS-сервера.
Файл hosts предназначен для разрешения DNS. DNS разрешает имена в IP-адреса и, боюсь, не имеет ничего общего с портами. Вам нужно будет использовать что-то еще в сочетании с файлом hosts для перенаправления порта (измените заголовок TCP, изменив порт назначения).
С помощью iptables:
Использует ли MAC OS iptables / netfilter (я так не думал) ..? Если OS X использует iptables, вы можете указать xyz.com на некоторый ip в файле hosts, например 157.166.226.25, а затем:
sudo iptables -t nat -A OUTPUT -p tcp --dport 80 -d 157.166.226.25 -j DNAT --to-destination 127.0.0.1:3000
:-)
Вам не нужно указывать порт в файле hosts. просто сделайте запись, как вы пропустили порт, как в 127.0.0.1 xyz.com, это направит вас на ваш локальный хост, а затем просто добавьте порт 3000 в конец вашего URL ... http://xyz.com:3000
Предполагая, что вы пытаетесь перехватить http, а не https, вам нужно будет прослушивать порт 80 на вашем локальном компьютере, но тогда вы можете использовать функции переадресации портов ssh, отправив ssh на localhost с помощью -L80:localhost:3000
, но вам придется сделать это как root.
Вероятно, было бы лучше иметь все, что работает на порту 3000, вместо этого просто слушайте порт 80.
Если вы управляете маршрутизатором между вами и xyz.com, вы можете вместо этого настроить правило переадресации портов.
Решением DNS для этого является использование записей SRV:
http://en.wikipedia.org/wiki/SRV_record
Это способ разрешить DNS, которая изначально была распределенной базой данных «имя для номера» или «номер для имени», включать «имя для конечной точки службы», которая может (необязательно) включать протокол и порт.
Плохая новость заключается в том, что приложения должны разрабатываться для использования записей SRV, поэтому это не подходящее решение для того, что вы пытаетесь сделать.
Я думаю, вам нужно использовать какой-то прокси-сервер или, может быть, что-то с программным брандмауэром для перенаправления подключений к портам ...
Chief-AG прав в том, что файл hosts используется для статического разрешения имен (наличие DNS не имеет значения). Однако вы можете сделать несколько вещей.
Кажется, это изрядная работа, но она выполнит то, о чем вы просите.
В качестве альтернативы виртуальным хостам; вы можете создать туннель ssh, прослушивающий порт 80 и перенаправляющий на localhost: 3000.
Я предполагаю, что это для разработки рельсов? если да, то запустите скрипт / server -p 80, чтобы он работал на стандартном веб-порту. тогда ваш xyz.com будет работать
Если вы используете Apache в качестве веб-сервера на xyz.com, вы можете использовать Apache ProxyPass
"преобразовать" в другой порт.