我有下一个 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。