我刚刚安装了 ubuntu(11.04)。
我已经安装了 apache/mysql/php 等。
我有几个网站
/var/www/站点1
/var/www/站点2
/var/www/站点3
我希望能够访问这些
http://site1.local
http://site2.local
http://site3.local
因此在我的主机文件中我有
127.0.0.1 site1.local
127.0.0.1 site2.local
127.0.0.1 site3.local
然后我就复制了/etc/apache2/sites-available/default
3遍。
所以现在我有
/etc/apache2/sites-available/site1
/etc/apache2/sites-available/site2
/etc/apache2/sites-available/site3
这些都看起来像(带有适当的 sitex 名称)
<VirtualHost site1.local>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/site1
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/site1/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>
</VirtualHost>
然后在终端中调用
sudo a2ensite site1 site2 site3 && sudo /etc/init.d/apache2 reload
这似乎可行,但同时只有一个虚拟主机可工作(包括默认),我做错了什么?
当我运行重新加载命令时,我得到
- 重新加载 Web 服务器配置 apache2
apache2:无法可靠地确定服务器的完全限定域名,
使用 127.0.1.1 作为 ServerName
[2011 年 4 月 15 日星期五 10:45:27] [警告] NameVirtualHost *:80 没有 VirtualHosts
答案1
根据您的主机文件,您映射此行:
<VirtualHost site1.local>
更改为:
<VirtualHost 127.0.0.1>
你想要的是:
<VirtualHost *:80>
ServerName site1.somesite.com
您可能还需要:
NameVirtualHost *:80
答案2
我遇到了同样的问题。经过多次尝试和错误,我通过添加到 解决了该问题NameVirtualHost *:80
。sites-available/default
并在 sites-available/ 中的任何其他文件中删除/不添加同一行
但我不知道为什么它会起作用。
答案3
错误消息:“无法可靠地确定服务器的完全限定域名...”是 apache2 服务器中的一个奇怪问题,它不会阻止或阻止 apache2 服务器在本地“VirtualHost”您的“ServerName”。请阅读 Shane Madden 提供的链接,因为解决方案就在那里。另一个“警告”消息:“NameVirtualHost *:80 没有 VirtualHosts”将阻止您成功。
问题 1:FQDN 的解决方案很简单,而且这两种解决方案似乎对不同的用户都有效 - 所以请同时执行这两种解决方案:将文本字符串“ServerName localhost”(不带引号)添加到两个文件之一(或两个)中;/etc/apache2/http.d.conf 文件,该文件开箱即为空白。并将其添加到 /etc/apache2/apache2.conf 文件的底部。
问题 2:阅读手册后,您将看到有关 Apache2 各种设置的示例,但您真正需要记住的一件事是指令“NameVirtualHost”(位于 /etc/apache2/ports.conf 中)需要与您在指令中指定的完全相同(位于 etc/apache2/sites-available/siteFile 中,其中“siteFile”在您的示例中是您的“site1”、“site2”和“site3”)。不要在一个中使用布尔值,而在另一个中使用静态 IP 地址或静态 IP:Port。一旦您了解了这种关系的严重性,那么阅读手册并尝试它们的设置就会奏效。
问题 3:隐藏的问题:了解了问题 2,您现在需要确保它不会发生在您的其他站点文件中 - 即您的默认文件中。如果默认文件有一个 VirtualHost *:80,而您的 site1 有一个 VirtualHost 127.0.0.1,并且您的 ports.conf 有一个 NameVirtualHost 127.0.0.1,那么 site1 和 ports.conf 是一致的,但默认文件现在不再适用,并将导致错误。
坚持住!这不容易……