Apache VirtualHost parcialmente ignorado

2

Estou executando um servidor local no Windows e quero fornecer acesso de lan a uma parte específica dele sempre que uma variável é definida. Funciona bem, exceto que a configuração principal é servida em vez do host virtual.

Eu especificamente fiz o host virtual apontar para um diretório proibido com o DirectoryIndex errado para ter certeza de que ele realmente funciona, mas a página é sempre exibida corretamente, não importa o que eu faça. Aqui está o host virtual:

<VirtualHost ${LANIP}:${PORT}>
    DocumentRoot ${SRVROOT}/htdocs/phpinfo
    ServerName ${LANIP}:${PORT}
    DirectoryIndex index.pl
</VirtualHost>

e aqui está o httpd.conf completo, sem comentários.

Quando uso httpd -DLANACCESS -S , esta é a saída:

c:\fauna\apache\bin>httpd -DLANACCESS -S                                
VirtualHost configuration:                                               
192.168.1.6:80         192.168.1.6 (C:/fauna/apache/conf/httpd.conf:464)
ServerRoot: "c:/fauna/apache"                                           
Main DocumentRoot: "C:/fauna/apache/htdocs"                             
Main ErrorLog: "c:/fauna/apache/logs/error.log"                         
Mutex rewrite-map: using_defaults                                        
Mutex lua-ivm-shm: using_defaults                                        
Mutex default: dir="C:/fauna/apache/logs/" mechanism=default            
PidFile: "c:/fauna/apache/logs/httpd.pid"                               
Define: LANACCESS                                                        
Define: DUMP_VHOSTS                                                      
Define: DUMP_RUN_CFG                                                     
Define: FAUNAROOT=/fauna                                               
Define: WIN_FAUNAROOT=C:\fauna                                         
Define: SRVROOT=/fauna/apache                                           
Define: WIN_SRVROOT=C:\fauna\apache                                     
Define: PERLPATH=C:\fauna\perl                                          
Define: WIN_PERLPATH=C:\fauna\perl                                      
Define: LANIP=192.168.1.6                                                
Define: PORT=80         

Isso, eu acho, indica que o Apache está identificando corretamente que existe uma diretiva VirtualHost , mas está ignorando tudo dentro dela ou de alguma forma não corresponde. Não importa o que, se eu caminho para localhost do servidor ou 192.168.1.6 de outra máquina na lan, ele serve a mesma página. Ele respeita permissões, mas do lan ele deve quebrar e dar um 404 com essa configuração de teste, não servir no site principal.

Eu até tentei substituir o vhost padrão:

<VirtualHost _default_>
    DocumentRoot ${SRVROOT}/htdocs/nothing
    ServerName localhost:80
</VirtualHost>

que dá esta saída do Apache:

c:\fauna\apache\bin>httpd -DLANACCESS -S
AH00112: Warning: DocumentRoot [c:/fauna/apache/htdocs/nothing] does not exist
VirtualHost configuration:
192.168.1.6:80         192.168.1.6 (C:/fauna/apache/conf/httpd.conf:464)
*:80                   localhost (C:/fauna/apache/conf/httpd.conf:474)
ServerRoot: "c:/fauna/apache"
Main DocumentRoot: "C:/fauna/apache/htdocs"
Main ErrorLog: "c:/fauna/apache/logs/error.log"
Mutex rewrite-map: using_defaults
Mutex lua-ivm-shm: using_defaults
Mutex default: dir="C:/fauna/apache/logs/" mechanism=default
PidFile: "c:/fauna/apache/logs/httpd.pid"
Define: LANACCESS
Define: DUMP_VHOSTS
Define: DUMP_RUN_CFG
Define: FAUNAROOT=/fauna
Define: WIN_FAUNAROOT=C:\fauna
Define: SRVROOT=/fauna/apache
Define: WIN_SRVROOT=C:\fauna\apache
Define: PERLPATH=C:\fauna\perl
Define: WIN_PERLPATH=C:\fauna\perl
Define: LANIP=192.168.1.6
Define: PORT=80

Então, aparentemente, faz analisar as tags VirtualHost . No entanto, isso tem exatamente o mesmo efeito e ambos os virtualhosts são completamente ignorados, como se eles não combinassem.

edit - Confirmei em mod_info que o VirtualHost corresponde , mas é claro que DocumentRoot e DirectoryIndex são completamente ignorados por algum motivo.

    
por mechalynx 26.12.2015 / 05:14

2 respostas

0

tl: dr: A não ser que eu esteja enganado, configurar aliases no servidor principal requer configurá-los separadamente em virtualhosts, caso contrário, o site principal será exibido devido a aliases, especialmente se você tiver aliased / como eu tive. Não tenho 100% de certeza disso, mas faz sentido com base no que recebi.

Parece que resolvi usando esta definição para o virtualhost:

<IfDefine LANACCESS>
    <VirtualHost ${LANIP}:${PORT}>
        Alias "/" "${SRVROOT}/htdocs/phpinfo/"
        # DocumentRoot ${SRVROOT}/htdocs/phpinfo
        <Directory "${SRVROOT}/htdocs/phpinfo">
            AllowOverride None
            # Options -ExecCGI
            Require ip 192.168.1
            # DirectoryIndex phpinfo.php
        </Directory>
        Redirect 404 /info
        Redirect 404 /status
        ServerName ${LANIP}:${PORT}
    </VirtualHost>
</IfDefine>

Anteriormente, o acesso seria registrado como passando pelo host virtual, mas serviria a página principal. Aliasing / com o DocumentRoot pretendido serve adequadamente a página pretendida. Directory é necessário para definir as permissões apropriadas, caso contrário, parece herdar da definição Directory anterior ou seguir os padrões ou algo assim. Portanto, se sua definição anterior de Directory exigir alteração, faça isso.

DocumentRoot aparentemente não tem efeito. Eu não sei porque, mas removê-lo da configuração principal parece não ter efeito também. Talvez a maneira como eu configure as coisas substitui isso.

Se você estiver usando Location para itens como mod_info ou caso contrário, use Redirect 404 para cancelar esses locais ou Require para proibir o acesso, caso contrário, eles funcionarão normalmente, independentemente de qualquer diretiva Alias configurou.

A menos que você configure Alias es para o restante dos locais do servidor, os anteriores parecem estar inativos quando sobrescrevem / ou, por algum outro motivo, não consigo descobrir.

    
por 26.12.2015 / 07:23
0

Você provavelmente está sendo vítima da virtualização do sistema de arquivos do Windows, onde os arquivos editados por não-administradores aparecem alterados para você, mas não para o httpd sendo executado como um serviço.

Edite sua configuração com a conta de administrador verdadeira.

    
por 26.12.2015 / 21:09