Apache atende a solicitação não deveria

1

Eu tenho os seguintes 2 registros de domínio

website.com 10.0.0.1
www.website.com 10.0.0.1

Eu tenho (tinha) os seguintes 2 Virtualhosts

#note how the IP address is wrong
<VirtualHost 10.0.0.2:80>

    ServerName website.com
    Redirect / http://www.website.com

</VirtualHost>

<VirtualHost 10.0.0.1:80>

    ServerName www.website.com
  #note how there is no alias here
    DocumentRoot /var/www/www.website.com

    <IfModule mpm_itk_module>
            AssignUserId www-website www-website
    </IfModule>

    CustomLog /var/log/apache2/www.website.com-access.log combined
    ErrorLog /var/log/apache2/www.website.com-error.log

</VirtualHost>

<VirtualHost 10.0.0.1:443>
    ServerName www.website.com

    DocumentRoot /var/www/www.website.com

    <IfModule mpm_itk_module>
            AssignUserId www-website www-website
    </IfModule>

    SSLEngine On
    SSLCertificateFile /etc/apache2/ssl/www.website.com

    CustomLog /var/log/apache2/www.website.com-ssl-access.log combined
    ErrorLog /var/log/apache2/www.website.com-ssl-error.log

</VirtualHost>

Eu esperava que uma solicitação para o link fosse retornada com um erro 404. No entanto, ele foi exibido como se fosse entregue de link . Por quê?

    
por jdog 18.08.2011 / 02:00

1 resposta

7

O LazyOne está exatamente certo. Contanto que você tenha as diretivas NameVirtualHost classificadas, então o primeiro VirtualHost definido para o endereço ip solicitado será usado, se não houver outras combinações ServerName ou ServerAlias .

Portanto, se você deseja veicular um 404 para cada endereço IP que não atingir uma correspondência de cabeçalho de host, crie uma VirtualHost (por ip) sem uma diretiva ServerName ou ServerAlias e posicione-a em a configuração para que seja carregada primeiro. Algo como:

<VirtualHost 10.0.0.1:80>
    Redirect 404 /   
</VirtualHost>

<VirtualHost 10.0.0.2:80>
    Redirect 404 /   
</VirtualHost>

<VirtualHost 10.0.0.2:80>
    ServerName website.com
    Redirect / http://www.website.com
</VirtualHost>

<VirtualHost 10.0.0.1:80>
    ServerName www.website.com
    #note how there is no alias here
    DocumentRoot /var/www/www.website.com
...
</VirtualHost>

Atualização : a maioria dos itens a seguir é extraída dos documentos do apache2, aqui e aqui .

O arquivo de configuração principal, geralmente chamado httpd.conf, é carregado primeiro. Mas se você estiver usando um pacote binário em um sistema baseado no Debian, há uma boa chance de ele ser chamado apache2.conf. Outros arquivos de configuração são adicionados usando a diretiva Include na configuração principal. Vários usos da diretiva Include são permitidos. As diretivas Include podem usar curingas no estilo fnmatch para carregar vários arquivos de configuração de uma vez, em ordem alfabética .

Para esclarecer mais (esperançosamente), sua configuração principal é carregada primeiro. Como Include diretivas são encontradas, elas são carregadas na ordem em que aparecem na configuração principal. Se um indivíduo Include usar um caractere curinga, cada arquivo de configuração correspondente será carregado em ordem alfabética.

Em um servidor debian, o apache2.conf pode ser parecido com isto:

# Include module configuration:
# ...
Include mods-enabled/*.conf

# Include all the user configurations:
Include httpd.conf

# Include ports listing
Include ports.conf

# ...

# Include generic snippets of statements
Include conf.d/

# Include the virtual host configurations:
Include sites-enabled/

Em outras palavras, qualquer arquivo terminado em .conf em mods-enabled / é carregado antes do httpd.conf, que é carregado antes do ports.conf, que é carregado antes de qualquer arquivo em conf.d /, etc.

    
por 18.08.2011 / 05:35