Estou trabalhando no site de um cliente que está atualmente hospedado em um servidor remoto externo. Baixei uma cópia do site para o meu computador local, que está executando uma 'pilha LAMP' configurada no Arch Linux, para usar como versão de desenvolvimento.
O site é construído em WordPress, portanto o domínio do site fica armazenado no banco de dados e este é utilizado sempre que são gerados links no site. Então, para evitar a edição do banco de dados, configurei o site no Apache com um host virtual e configurei o nome de domínio do servidor para ser o mesmo do site 'ao vivo', por exemplo, no meu arquivo 'vhosts.conf' ...
ServerName live-domain-name.co.uk
ServerAlias *.live-domain-name.co.uk
Também adicionei o domínio ao meu arquivo 'hosts' local como:
127.0.0.1 live-domain-name.co.uk
O que eu gostaria de poder fazer é acessarambossites do meu navegador, pelo menos para que, se eu tiver o Apache em execução, eu obtenha minha cópia local do site, mas se o Apachenão éem execução, obtenho a versão 'real' do site!
Adicionei 127.0.0.1
como primeira entrada 'servidor de nomes' em meu /etc/resolv.conf
arquivo, sendo o segundo o IP do meu roteador de Internet e também tenho um dos servidores DNS públicos do Goolge como o terceiro. No entanto, mesmo quando o Apache não está em execução, $ ping ...
ainda mostra o IP do domínio como 127.0.0.1!
Suponho que preciso de algum tipo de resolvedor de DNS que verifique primeiro meu host local, mas se o site não for encontrado (ou seja, o Apache não estiver em execução), ele voltará a usar um dos outros servidores DNS! - só que não tenho ideia de como instalar e configurar um servidor/encaminhador DNS...
Alguém pode me ajudar por favor?
Responder1
Acho que o método sugerido por @piercedRichard (ou seja, excluir a entrada de /etc/hosts quando o Apache estiver inativo) é viável ...
mas também posso pensar em uma maneira distorcida (usando iptables) de rotear o endereço IP de live-domain-name.co.uk de volta para localhost. Eu acho que isso será muito mais robusto - porque a resolução DNS será armazenada em cache e, além de corrigir /etc/hosts, você também terá que liberar 'caches' de DNS na camada do sistema operacional e em alguns navegadores (firefox, por exemplo). As alterações no iptables devem ser instantâneas ...
talvez algo como (redirecionar para local):
iptables -t nat -A OUTPUT -p tcp --dst live-ip --dport 80 -j DNAT --to-destination 127.0.0.1:80
excluir regra (parar redirecionamento):
iptables -t nat -D OUTPUT -p tcp --dst live-ip --dport 80 -j DNAT --to-destination 127.0.0.1:80
No que diz respeito a detectar se o apache está ativo ou não - coloque as regras do iptables no seu arquivo /etc/init.d/apache2 -
ou escreva um script que tente se conectar ao localhost: 80, se estiver ok, crie a regra, caso contrário, exclua regra...
Responder2
A maioria dos sistemas operacionais resolverá seus hosts
arquivos antes de tentar encontrar um servidor DNS. Se você remover (ou comentar) essa linha hosts
, ele consultará o servidor DNS e descobrirá que é um IP remoto.
Você também pode ter que alterar o hostname
, se estiver definido como o mesmo, pois hostname
também pode ser usado para resolver IPs (pelo menos por alguns sistemas no Linux).
Página de manual hosts.conf- Veja mais informações sobre a order
diretriz.