NameVirtualHost 在 2 个 IP 和 3 个 DocumentRoot 上的行为不佳

NameVirtualHost 在 2 个 IP 和 3 个 DocumentRoot 上的行为不佳

我有下一个 apache 虚拟主机和 NameVirtualHost 设置:

NameVirtualHost 10.100.106.89

<VirtualHost 10.100.106.89>
        DocumentRoot /var/www/html/dev/novared_soporte/branches/v0.3/soporte
        ServerName 10.100.106.89
</VirtualHost>
<VirtualHost 10.100.106.89>
        DocumentRoot /var/www/html/phpmyadmin
        ServerName 10.100.106.89/phpmyadmin
        ServerAlias 10.100.106.89/pma
</VirtualHost>
<VirtualHost 10.100.106.90>
        ServerName 10.100.106.90
        DocumentRoot /var/www/html
</VirtualHost>

当我尝试访问时:10.100.106.89我可以到达我需要的站点:/var/www/html/dev/novared_soporte/branches/v0.3/soporte

但是当我尝试访问时,10.100.106.89/phpmyadmin我实际上在 error_log.txt (httpd 日志) 上收到此错误:

[Thu Jun 28 12:12:59 2012] [error] [client 10.100.103.31] File does not exist: /var/www/html/dev/novared_soporte/branches/v0.3/soporte/phpmyadmin

我还是搞不清楚错误在哪里。顺便说一句10.100.106.90,它至少在DocumentRoot /var/www/html

答案1

服务器名称不能由 FQDN 以外的任何内容组成 - 不要/在其中输入 - 它根本不会被解释。

考虑这样做,然后只需添加一个 HOSTS 文件条目即可

<VirtualHost 10.100.106.89>
    DocumentRoot /var/www/html/dev/novared_soporte/branches/v0.3/soporte
    ServerName www.example.com
</VirtualHost>
<VirtualHost 10.100.106.89>
    DocumentRoot /var/www/html/phpmyadmin
    ServerName phpmyadmin.example.com
</VirtualHost>

然后在你的 HOSTS 文件中添加

10.100.106.89 www.example.com
10.100.106.89 phpmyadmin.example.com

您可以自由example.com使用IETF 指南

或者将两者合并vhosts为一个vhost

<VirtualHost 10.100.106.89>
    DocumentRoot /var/www/html/dev/novared_soporte/branches/v0.3/soporte
    ServerName 10.100.106.89 
    ServerAlias www.example.com
    Alias /phpmyadmin /var/www/html/phpmyadmin
</VirtualHost>

答案2

您两次声明了 10.100.106.89 的 DocumentRoot,您必须使用 phpmyadmin 的别名

NameVirtualHost 10.100.106.89
<VirtualHost 10.100.106.89>
        DocumentRoot /var/www/html/dev/novared_soporte/branches/v0.3/soporte
        ServerName 10.100.106.89
        Alias /phpmyadmin /var/www/html/phpmyadmin    
        #you need to explicitly allow access, since your alias is outside of your document root
        <Directory /var/www/html/phpmyadmin>
                Order allow,deny
                Allow from all
        </Directory>
</VirtualHost>
<VirtualHost 10.100.106.90>
        ServerName 10.100.106.90
        DocumentRoot /var/www/html
</VirtualHost>

这将只允许通过 10.100.106.89/phpmyadmin 访问,不允许其他虚拟主机访问。

这也许是一个解决方案,最好只使用 Include 指令来包含 phpmyadmin 附带的 apache

答案3

当您将 IP 地址定义为 NameVirtualHost 时,apache 服务器期望浏览器传递与该主机关联的域来确定要提供哪个文档根目录。

例如:

NameVirtualHost 10.100.106.89

<VirtualHost 10.100.106.89>
        DocumentRoot /var/www/html/dev/novared_soporte/branches/v0.3/soporte
        ServerName mydomain.com
        ServerAlias www.mydomain.com
</VirtualHost>
<VirtualHost 10.100.106.89>
        DocumentRoot /var/www/html/phpmyadmin
        ServerName phpmyadmin.mydomain.com
</VirtualHost>
<VirtualHost 10.100.106.90>
        ServerName 10.100.106.90
        DocumentRoot /var/www/html
</VirtualHost>

当用户访问 mydomain.com 或 www.mydomain.com 时,您的 apache 将提供第一个文档根目录,当用户访问 phpmyadmin.mydomain.com 时,提供第二个 phpmyadmin 根目录。所有这 3 条记录都将指向同一个 IP 地址。对于任何到达同一 IP 地址但没有匹配的 ServerName 或 ServerAlias 的流量,它将默认为第一个 VirtualHost。

相关内容