Apache VirtualHost 部分被忽略

Apache VirtualHost 部分被忽略

我在 Windows 上运行本地服务器,我想在定义变量时提供对服务器特定部分的 LAN 访问权限。它运行正常,只是服务于主配置而不是虚拟主机。

我特意让虚拟主机指向一个带有错误的禁止目录,DirectoryIndex以确保它确实有效,但无论我做什么,页面始终正确提供。这是虚拟主机:

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

这是完成httpd.conf,删除了评论。

当我使用时httpd -DLANACCESS -S,这是输出:

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         

我认为这表明 Apache 正确地识别出存在指令VirtualHost,但忽略了其中的所有内容,或者不知何故它不匹配。无论如何,如果我localhost从服务器或192.168.1.6局域网上的另一台机器访问,它都会提供相同的页面。它尊重权限,但从局域网来看,它应该会中断并给出 404 的测试配置,而不是为主站点提供服务。

我甚至尝试覆盖默认的虚拟主机:

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

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

因此,显然,解析VirtualHost标签。但是,这会产生完全相同的效果,并且两个虚拟主机都会被完全忽略,就好像它们不匹配一样。

编辑 - 我已经mod_info确认VirtualHost 确实匹配,但当然由于某种原因被完全忽略DocumentRootDirectoryIndex

答案1

总结:除非我弄错了,否则在主服务器上设置别名需要在虚拟主机中单独设置它们,否则主站点会因为别名而得到服务,特别是如果你/像我一样设置了别名。我对此不是 100% 确定,但根据我得到的信息,这是有道理的。

我似乎已经使用虚拟主机的这个定义解决了这个问题:

<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>

以前,访问会注册为通过虚拟主机,但会提供主页。通过/与目标建立别名DocumentRoot,它可以正确提供目标页面。Directory需要设置适当的权限,否则它似乎会继承以前的Directory定义或使用默认值等。因此,如果您以前的Directory定义需要修改,请进行修改。

DocumentRoot显然没有效果。我不知道为什么,但从主配置中删除它似乎也没有效果。也许我的设置方式覆盖了它。

如果您正在使用或其他Location操作mod_info,请使用Redirect 404取消这些位置或Require禁止访问,否则它们将正常运行,无论Alias您设置了什么指令。

Alias除非您为其余服务器位置设置了es,否则先前的服务器位置在覆盖时/或由于其他我无法弄清楚的原因似乎处于非活动状态。

答案2

您很可能成为 Windows 文件系统虚拟化的受害者,非管理员编辑的文件对您来说似乎发生了更改,但对于作为服务运行的 httpd 来说却没有变化。

使用真正的管理员帐户编辑您的配置。

相关内容