我可能设置错了。似乎我总是无法正确配置虚拟主机。
重新启动 Apache 后出现此错误:
Restarting web server apache2
apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
[Wed Oct 14 17:39:17 2009] [warn] VirtualHost site1.local:0 overlaps with VirtualHost site2.local:0, the first has precedence, perhaps you need a NameVirtualHost directive
为什么 ServerName 使用 127.0.1.1?为什么我的 site2.local 虚拟主机不起作用?
这是我的主机文件:
# /etc/hosts
127.0.0.1 localhost site1.local site2.local
127.0.1.1 andrew-laptop
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts
在 /etc/apache2/sites-available 中我有 3 个文件:default、site1.local 和 site2.local
默认:
NameVirtualHost *
<VirtualHost *>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/>
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 /var/log/apache2/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog /var/log/apache2/access.log combined
ServerSignature On
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>
站点1.本地:
<VirtualHost site1.local>
ServerAdmin webmaster@localhost
ServerName admin
DocumentRoot /home/andrew/Projects/site1/public
CustomLog /var/log/apache2/site1-access.log combined
<Directory /home/andrew/Projects/site1/public>
Options FollowSymLinks
AllowOverride All
</Directory>
</VirtualHost>
站点2.本地:
<VirtualHost site2.local>
ServerAdmin webmaster@localhost
ServerName admin
DocumentRoot /home/andrew/Projects/site2/public
CustomLog /var/log/apache2/site2-access.log combined
<Directory /home/andrew/Projects/site2/public>
Options FollowSymLinks
AllowOverride All
</Directory>
</VirtualHost>
如果其中任何一项看起来不对,请告诉我。请帮我找出我的设置出了什么问题。
答案1
我相信您应该使用 site1.local / site2.local 作为虚拟主机文件中的 ServerName 参数...至少这对我来说是有效的。
127.0.0.1 ServerName 默认值很可能在 apache2.conf 中设置。
答案2
这里有一个问题:在 /etc/hosts 中,你的 localhosts 行是错误的。你有这个:
# /etc/hosts
127.0.0.1 localhost site1.local site2.local
你需要有这个:
# /etc/hosts
127.0.0.1 localhost.localdomain localhost
第一行很重要。您可以将 site1.local 和 site2.local 分配给几乎任何其他内容,但第一行需要同时包含localhost.localdomain
和localhost
。
我不确定是什么黑魔法导致了这个问题,但如果将这一行更改为其他内容,Ubuntu 9.04 和 Debian 5.0.3 中就会出现奇怪的问题。我最近安装的 Debian 也出现了同样的 Apache 错误(还有一些其他有趣的问题),直到我回滚了自己对该行所做的更改。
由于您仍然需要定义site1.local
和site2.local
,因此您可以这样做:
127.0.1.1 andrew-laptop site1.local site2.local
但是 Apache 可能更喜欢为网站使用不同的 IP 地址,因此您最好这样做:
127.0.1.1 andrew-laptop
127.0.1.2 site1.local
127.0.1.3 site2.local
127.0.0.0/8 网络是环回网络,因此您可以为其选择任何您喜欢的 127.xxx 地址。