Я работаю на веб-сайте клиента, который в настоящее время размещен на внешнем удаленном сервере. Я загрузил копию сайта на свой локальный компьютер, на котором запущен «стек LAMP», установленный в 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-сервера / пересылки ...

Кто-нибудь может мне помочь?

2 ответа2

2

Я думаю, что метод, предложенный @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, если все в порядке, то создайте правило, иначе удалите правило ...

0

Большинство ОС решат проблему из своего файла hosts прежде чем попытаются найти DNS-сервер. Если вы удалите (или закомментируете) эту строку с hosts , она затем запросит DNS-сервер и обнаружит, что это удаленный IP-адрес.

Вам также может потребоваться изменить hostname , если оно установлено на то же самое, так как hostname может использоваться для разрешения IP-адресов (по крайней мере, в некоторых системах в Linux).

Страница man hosts.conf - Более подробная информация о директиве order .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .