Apache - servidor não resolvido por / etc / hosts se eu não tiver conexão com a internet

4

Configurei muitos hosts virtuais no meu servidor apache2 atual, na minha máquina local (Ubuntu 13.10).

Esses são sites locais diferentes, com domínios definidos em my /etc/hosts :

127.0.0.1       localhost
127.0.0.1       agroplasticos.dev
127.0.0.1       resources.dev
127.0.1.1       luismasuelli-inspiron14

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

Onde os sites agroplasticos.dev e resources.dev foram criados por mim e as configurações anteriores foram definidas por padrão.

Para localhost , agroplasticos.dev e resources.dev , tenho entradas de site no diretório /etc/apache2/sites-enabled (apenas essas 3 entradas existem nesse diretório), que são links para os arquivos correspondentes em /etc/apache2/sites-available :

agroplasticos.dev se parece com:

<VirtualHost agroplasticos.dev:80>
    ServerName agroplasticos.dev:80
    ServerAdmin webmaster@localhost

    DocumentRoot /var/www/agroplasticos
    <Directory /var/www/agroplasticos>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride all
        Order allow,deny
        allow from all
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/agroplasticos-error.log

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn

    CustomLog ${APACHE_LOG_DIR}/agroplasticos-access.log combined
</VirtualHost>

e resources.dev se parecem com:

<VirtualHost resources.dev:80>
    ServerName resources.dev:80
    ServerAdmin webmaster@localhost

    DocumentRoot /var/www/resources
    <Directory /var/www/resources>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride all
        Order allow,deny
        allow from all
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/resources-error.log

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn

    CustomLog ${APACHE_LOG_DIR}/resources-access.log combined
</VirtualHost>

E, por último, mas não menos importante, localhost é assim:

<VirtualHost localhost:80>
    ServerName localhost:80
    ServerAdmin webmaster@localhost

    DocumentRoot /var/www
    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>
    <Directory /var/www/>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride None
        Order allow,deny
        allow from all
    </Directory>

    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/

    <Directory "/usr/lib/cgi-bin">
        AllowOverride None
        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
        Order allow,deny
        Allow from all
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn

    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

O que eu espero é que, se eu acessar esses domínios, eles sejam resolvidos para 127.0.0.1 e eles sejam atendidos pelo apache usando as diferentes configurações de cada site. Em particular, resources.dev é apenas um site de arquivos estáticos (tem apenas imagens que eu carrego externamente via http de programas / scripts que estou fazendo), então eu não me importo nem mesmo ter PHP para tal site. Isso significa: eu acessei http://resources.dev/mirrorlings/images/sample.png no meu navegador e recuperei uma imagem.

No entanto - e existe o problema - o site é montado com sucesso se eu tiver uma conexão de rede . Se eu não estiver conectado, então:

  1. Eu posso acessar http://localhost/ (a tela de amostra, nunca modificada, "funciona")
  2. Eu não posso acessar http://resources.dev/ (o servidor não o montou; clientes http como navegadores ou carregadores do ActionScript não podem acessar esse URL).
  3. Eu não posso acessar http://agroplasticos.dev/ (o servidor não montou; mesmo sobre clientes http).
  4. Estou recebendo este log de erros ao executar sudo service apache2 restart :

    [Sun Jul 20 15:39:55 2014] [error] (111)Connection refused: Could not resolve host name localhost -- ignoring!
    [Sun Jul 20 15:39:55 2014] [error] (111)Connection refused: Could not resolve host name agroplasticos.dev -- ignoring!
    [Sun Jul 20 15:39:55 2014] [warn] The Alias directive in /etc/apache2/conf.d/phpmyadmin.conf at line 3 will probably never match because it overlaps an earlier Alias.
    [Sun Jul 20 15:39:55 2014] [error] (111)Connection refused: Could not resolve host name agroplasticos.dev -- ignoring!
    [Sun Jul 20 15:39:55 2014] [error] (111)Connection refused: Could not resolve host name localhost -- ignoring!
    [Sun Jul 20 15:39:55 2014] [error] (111)Connection refused: Could not resolve host name resources.dev -- ignoring!
    apache2: apr_sockaddr_info_get() failed for luismasuelli-inspiron14
    apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
    [Sun Jul 20 15:39:56 2014] [error] (111)Connection refused: Could not resolve host name localhost -- ignoring!
    [Sun Jul 20 15:39:56 2014] [error] (111)Connection refused: Could not resolve host name agroplasticos.dev -- ignoring!
    [Sun Jul 20 15:39:56 2014] [warn] The Alias directive in /etc/apache2/conf.d/phpmyadmin.conf at line 3 will probably never match because it overlaps an earlier Alias.
    [Sun Jul 20 15:39:56 2014] [error] (111)Connection refused: Could not resolve host name agroplasticos.dev -- ignoring!
    [Sun Jul 20 15:39:56 2014] [error] (111)Connection refused: Could not resolve host name localhost -- ignoring!
    [Sun Jul 20 15:39:56 2014] [error] (111)Connection refused: Could not resolve host name resources.dev -- ignoring!
    apache2: apr_sockaddr_info_get() failed for luismasuelli-inspiron14
    apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
    

    Também não entendo porque esse log apareceu duas vezes. Você pode ver que o mesmo bloco de linha é repetido com um segundo de atraso.

E a minha pergunta aqui : Por que preciso ter conexão com a internet quando o que eu quero é que o Apache tenha resolvido domínios tão falsos como locais, já que eles estão em /etc/hosts ? O que devo configurar para permitir uma resolução local sem rede?

Eu estava tentando desenvolver sem ter conexão com a Internet e não conseguia acessar meus servidores locais usando a resolução de domínio local /etc/hosts para o endereço IP local (loopback).

    
por Luis Masuelli 21.07.2014 / 05:16

4 respostas

0

Você precisa editar o arquivo /etc/apache2/apache2.conf e adicionar seus domínios na seção de configuração global.

    
por Rajesh Rajendran 21.07.2014 / 08:05
0

Sua configuração do apache parece bem. E estes funcionarão bem como um fallback se você tiver uma conexão com a internet.

Mas o que está faltando é um resolvedor de DNS local, que pode transferir sua solicitação para um servidor local, em vez de fazê-lo resolver no DNS global da Internet. Existe um servidor mini dns para o chamado DNSMASQ .

Você pode configurá-lo para resolver todos os domínios .dev para o seu endereço de loopback sem consultar o servidor de DNS da Internet.

sudo apt-get install dnsmasq

Você pode encontrar a configuração necessária consultando seus documentos.

Você tem outra opção para fazer isso por meio de um arquivo PAC. Embora eu sugira que você fique com o dnsmasq, já que é muito popular e mais fácil fazer isso.

    
por Lokesh Devnani 04.07.2016 / 12:55
0

Parece que suas configurações de resolv.conf estão fazendo com que seu arquivo hosts seja ignorado.

Os ubuntu's recentes usaram o resolveconf para gerenciar o resolv.conf porque é melhor em trabalhar em cenários onde existem várias conexões.

Documentação geral do resolvconf link

Use a técnica na resposta aceita aqui para regenerar suas configurações do resolv.conf Como fazer Eu tenho o resolvconf para regenerar o resolv.conf depois de alterar / etc / network / interfaces?

    
por Amias 04.07.2016 / 13:52
0

Há outra coisa para analisar - /etc/nsswitch.conf . Você pode especificar a prioridade das pesquisas de nome de host. Eu tenho no meu arquivo nsswitch.conf a seguinte linha:

hosts:          files mdns4_minimal [NOTFOUND=return] dns mdns4

Isto é como interpretá-lo:

A linha hosts: especifica a ordem na qual vários serviços de resolução de nomes serão tentados. O padrão é:

  1. Comece verificando o arquivo / etc / Hosts. Se esse arquivo fornecer um endereço IP para o nome do host em questão, ele será usado.

  2. Caso contrário, tente o mdns4_minimal, que tentará resolver o nome por meio do DNS de multidifusão somente se ele terminar com .local. Se isso acontecer, mas nenhum host mDNS estiver localizado, o mdns4_minimal retornará NOTFOUND. A resposta do switch de serviço de nome padrão para NOTFOUND seria tentar o próximo serviço listado, mas a entrada [NOTFOUND = return] substitui isso e interrompe a pesquisa com o nome não resolvido.

  3. Em seguida, tente os servidores DNS especificados. Isso acontecerá mais ou menos imediatamente se o nome não terminar em .local ou se não o fizer. Se você remover a entrada [NOTFOUND = return], o nsswitch tentaria localizar os hosts locais não resolvidos via DNS unicast. Isso geralmente seria ruim, já que enviaria muitos desses pedidos para servidores DNS da Internet que nunca os resolveriam. Aparentemente, isso acontece muito.

  4. A entrada final do mdns4 indica que o mDNS será tentado para nomes que não terminam em .local se os servidores DNS especificados não puderem resolvê-los. Eu pensei que isso era para pegar hosts mDNS quando você não especifica o TLD. Local, mas eu apenas tentei e não funciona. Acho que vou investigar isso.

Fonte: link

Ao alterar o pedido nesta linha, você pode alterar a ordem de como os nomes de host são resolvidos. Isso pode explicar o fato de que localhost não pode ser resolvido.

    
por nobody 04.07.2016 / 14:05