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正常工作,至less对于它的DocumentRoot /var/www/html

你不能有一个服务器名称包含除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 

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

或者将两个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> 

你说了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访问,没有其他的虚拟主机。

这可能是一个解决scheme,最好只使用Include指令来包含phpmyadmin附带的apache

当您将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> 

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