Могу ли я использовать файл/etc / hosts для настройки псевдонима [закрыто]
на /etc/hosts
файл может использоваться для переопределения определений dns, т. е. для указания имени хоста на другой ip.
Я хочу использовать /etc/hosts
сделать запись псевдонима, т. е. заставить мой компьютер думать, что www.mysite.com не указывает на" жестко закодированный " ip, но вместо этого является синонимом mychangingip.myip.com.
можно ли это сделать?
9 ответов
/etc/hosts
не может использоваться (сам по себе) для создания псевдонимов хоста.
файл hosts создает внутренний эквивалент A
и PTR
записи из DNS, т. е. сопоставление имени хоста с IP-адресом и наоборот.
хотя вы можете добавить несколько имен к определенному IP, это требует, чтобы вы знали IP заранее. Его нельзя использовать для получения того же эффекта, что и CNAME
запись, где имя указывает на другое имя, которое в свою очередь разрешает необходимый IP.
Если вы хотите SSH на сервер (с динамически изменяющейся записью DNS), то вы можете эффективно добавить "псевдоним" (в файле ~/.ssh / config) создание записи:
Host myAlias
HostName mychangingip.myip.com
затем вы можете "ssh myAlias" (есть другие директивы, которые могут быть полезны, например, пользователь, порт и т. д.).
у меня была такая же точная проблема, и я решил ее, установив и используя nginx на моем mac. Для этого не нужен dns-сервер. Вы можете просто воспользоваться nginx в proxy_pass
возможность получить тот же эффект, что и cname.
после установки и установки nginx, вы можете псевдоним first.com
на second.com
такой. В вашем /etc/hosts forward first.com
трафик на 127.0.0.1.
127.0.0.1 first.com
затем в конфигурации nginx добавьте следующее:
server {
listen 80;
server_name first.com;
access_log off;
location / {
proxy_pass http://second.com;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-for $remote_addr;
proxy_connect_timeout 300;
}
}
этот должно эффективно дать вам настройку cname-like. Надеюсь, это поможет!
этот сценарий оболочки может сделать трюк для вас, если вам просто нужно иметь обновленный IP-адрес в файле hosts и не нравится накладные расходы на пользовательскую настройку DNS. Например, вы можете регулярно запускать его в процентах.
#!/bin/bash
# Get the dynamic IP (dirty, I know)
IP=`host -t a mychangingip.myip.com | perl -nle '/((?:\d+\.?){4})/ && print ' | head -n1`
# Update the hosts file
if test -n "$IP"; then
grep -v www.thesite.com /etc/hosts > /tmp/hosts
echo "$IP www.thesite.com" >> /tmp/hosts
cp /tmp/hosts /etc/hosts
fi
Я посмотрел на это недавно, я не мог найти реального решения. Однако вы можете получить частично то, что хотите, добавив строку поиска в /etc/resolv.conf например:
search myip.com
тогда он будет искать mychangingip.myip.com при попытке решить mychangingip См. также справочную страницу для resolv.conf
Это можно сделать, запустив локальный DNS-распознаватель (что-то вроде dnsmasq). Проверка https://serverfault.com/questions/22419/set-dns-server-on-os-x-even-when-without-internet-connection
одно предупреждение если вы имеете такую строчку :
127.0.0.1 dev.example.com
когда вы фактически получаете запрос в своем приложении (в моем случае ASP.NET) он будет actaully решил "localhost", так что вы не можете делать такие вещи :
if (Request.Url.Authority == "dev.example.com) {
// ...
}
псевдоним разрешен к "localhost". я думаю, что это поведение работает, как будто это CNAME
есть поставщики услуг, которые будут комфортно и надежно делать это за вас. Ярким примером является dyndns.
Я так не думаю, файл hosts на самом деле не является альтернативой dns-серверу. Вместо того, чтобы пытаться выяснить, как установить и настроить bind dns, Вы можете попробовать filebased SheerDNS. http://threading.2038bug.com/sheerdns/ (лучший легкий dns-сервер, который я нашел через freshmeat).