Я работаю над сайтом клиента, который в настоящее время размещен на внешнем удаленном сервере. Я загрузил копию сайта на свой локальный компьютер, на котором запущен 'LAMP stack', установленный на Arch Linux, чтобы использовать его в качестве версии для разработки.
Сайт создан на WordPress, поэтому домен сайта хранится в базе данных и используется всякий раз, когда на сайте генерируются ссылки. Поэтому, чтобы не редактировать базу данных, я настроил сайт в Apache с виртуальным хостом и установил доменное имя сервера таким же, как у «живого» сайта, например, в моем файле «vhosts.conf»...
ServerName live-domain-name.co.uk
ServerAlias *.live-domain-name.co.uk
Я также добавил домен в свой локальный файл «hosts» следующим образом:
127.0.0.1 live-domain-name.co.uk
Я хотел бы иметь возможность доступаобасайты из моего браузера, по крайней мере, если у меня запущен Apache, я получаю свою локальную копию сайта, но если Apacheне являетсязапустив его, я получаю «настоящую» версию сайта!
Я добавил 127.0.0.1
в качестве первой записи 'nameserver' в свой /etc/resolv.conf
файл, вторая - IP моего интернет-маршрутизатора, а также у меня есть один из публичных DNS-серверов Goolge в качестве третьей. Однако даже когда Apache не запущен, $ ping ...
IP для домена все равно отображается как 127.0.0.1!
Я предполагаю, что мне нужен какой-то DNS-резолвер, который сначала проверит мой локальный хост, но если сайт не будет найден (например, Apache не запущен), то он вернется к использованию одного из других DNS-серверов! -- только я понятия не имею об установке и настройке DNS-сервера/пересылки...
Кто-нибудь может мне помочь?
решение1
Я думаю, что метод, предложенный @piercedRichard (т. е. удаление записи из /etc/hosts при падении Apache), работоспособен...
но я также могу придумать извращенный способ (используя iptables) перенаправить ip-адрес live-domain-name.co.uk обратно на localhost. Я думаю, это будет намного надежнее - потому что разрешение DNS будет кэшироваться и помимо исправления /etc/hosts вам также придется очищать 'кэши' DNS на уровне ОС и в некоторых браузерах (например, Firefox). Изменения в iptables должны быть мгновенными ...
возможно что-то вроде (перенаправление на локальный):
iptables -t nat -A OUTPUT -p tcp --dst live-ip --dport 80 -j DNAT --to-destination 127.0.0.1:80
удалить правило (остановить перенаправление):
iptables -t nat -D OUTPUT -p tcp --dst live-ip --dport 80 -j DNAT --to-destination 127.0.0.1:80
Что касается определения того, запущен ли Apache или нет, то либо поместите правила iptables в файл /etc/init.d/apache2,
либо напишите скрипт, который попытается подключиться к localhost:80. Если все в порядке, то создайте правило, иначе удалите правило...
решение2
Большинство ОС будут разрешать из своего hosts
файла, прежде чем попытаются найти DNS-сервер. Если вы удалите (или закомментируете) эту строку из hosts
, он затем запросит DNS-сервер и обнаружит, что это удаленный IP.
Вам также может потребоваться изменить hostname
, если он установлен на то же значение, поскольку он hostname
также может использоваться для разрешения IP-адресов (по крайней мере, некоторыми системами в Linux).
страница руководства hosts.conf- Более подробную информацию о order
директиве см.