Как настроить и получить доступ как к локальной, так и к удаленной версиям одного и того же веб-сайта/домена?

Как настроить и получить доступ как к локальной, так и к удаленной версиям одного и того же веб-сайта/домена?

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

Связанный контент