我已经搜索和重新配置了 6 天,并且掉了好几缕头发。
问题:
我想在我的 ubuntu 服务器上有 2 个以上的虚拟主机(1 个 ip)但是 - 只显示第一个“按字母顺序”列出的启用站点。000-default
www.domain1.com
www.domain2.com
单独来看,它们都有效(如果我对每个都使用 a2dissite,则留下 1)
配置: - UBUNTU 10.10 服务器 - EC2 实例(不要因为这部分而找我麻烦 - 希望这不是问题!) - APACHE 2.2.16 - DNS my.domain.com - 到我的公共 ec2 dns(这有效)
虚拟主机:#默认
<VirtualHost *:80>
DocumentRoot "/home/www/"
<Directory />
Options FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Satisfy all
</Directory>
<Directory /home/www>
Options Indexes Multiviews FollowSymLinks
AllowOverride all
Order allow,deny
Allow from all
</Directory>
LogLevel debug
ErrorLog /home/www/logs/error.log
CustomLog /home/www/logs/access.log "combined"
</VirtualHost>
虚拟主机 1 - domain1
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName domain1.com
ServerAlias domain1.com www.domain1.com
# Indexes + Directory Root.
DirectoryIndex index.php
DocumentRoot "/home/www/www.domain1.com/"
# Directory directive
<Directory "/home/www/www.domain1.com">
Options Indexes Multiviews FollowSymLinks
AllowOverride none
Order allow,deny
Allow from all
</Directory>
# CGI Directory
ScriptAlias /cgi-bin/ /home/www/www.domain1.com/cgi-bin
<Location /cgi-bin>
Options +ExecCGI
</Location>
# Logfiles
LogLevel debug
ErrorLog "/home/www/www.domain1.com/logs/error.log"
CustomLog "/home/www/www.domain1.com/logs/access.log" combined
</VirtualHost>
我在另一个具有不同域名的文档根目录中也有上述内容
符号链接已到位。apache2ctl -St
显示以下内容 -
VirtualHost configuration:
*:80 is a NameVirtualHost
default server (/etc/apache2/sites-enabled/000-default:4)
port 80 namevhost (/etc/apache2/sites-enabled/000-default:4)
port 80 namevhost domain1.com (/etc/apache2/sites-enabled/www.domain1.com:4)
port 80 namevhost www.domain2.com (/etc/apache2/sites-enabled/www.domain2.com:4)
Syntax OK
我的端口.conf:
NameVirtualHost *:80
Listen 80
<IfModule mod_ssl.c>
NameVirtualHost *.443
Listen 443
</IfModule>
<IfModule mod_gnutls.c>
Listen 443
</IfModule>
我的 apache2.conf 与默认值没有任何变化,并且 httpd.conf 是空的。
我尝试了以下方法(以及大约一百种其他方法):
- http://ubuntu-tutorials.com/2008/01/09/setting-up-name-based-virtual-hosting/ -http://httpd.apache.org/docs/2.2/rewrite/vhosts.html“]http://httpd.apache.org/docs/2.2/rewrite/vhosts.html
- http://ubuntuforums.org/archive/index.php/t-1466665.html“]http://ubuntuforums.org/archive/index.php/t-1466665.html
- http://flurdy.com/docs/ec2/basics/index.html“]http://flurdy.com/docs/ec2/basics/index.html
- http://www.webmasterworld.com/apache/3282118.htm“]http://www.webmasterworld.com/apache/3282118.htm
似乎我已经尝试了其他人遇到的所有问题,但似乎没有什么能解决我的问题。
可能性:
- EC2
- 文件权限 - 我将所有内容更改为 apache2 用户“www-data” - 没有成功。
- 我是个傻瓜...希望你们中有人能指出我的问题。:)
答案1
说到虚拟主机,我们的一个项目也遇到了同样的问题。Apache 的“ServerName”指令不是可选的,而是必须使用的。当没有匹配的 ServerName 时,Apache 没有“默认”虚拟主机可以加载。如果虚拟主机服务器名重叠,那么这只会给您带来问题。最后,在这种情况下,Apache 只会根据其配置文件的加载顺序决定要做什么。如果您尝试通过未指定的地址(IP 地址或虚拟主机上未映射的地址)联系服务器,它将加载第一个为该地址加载配置的虚拟主机。正确的做法是让虚拟主机在 ServerName 和 ServerAlias 指令中详细说明所有可能的服务器名。请参阅Apache 上基于名称的虚拟主机,并仔细考虑有证据的注释“主要宿主消失”。
答案2
您的 ports.conf 是否可能由于使用句点代替冒号而失败?
<IfModule mod_ssl.c>
NameVirtualHost *.443
Listen 443
</IfModule>
注意上面的**.443* 应该是**:443*。
答案3
只是猜测。查看 apache2ctl -St 的结果,你会发现输出有所不同:
port 80 namevhost domain1.com
port 80 namevhost www.domain2.com
也许您还应该将 domain2.com 设置为 ServerName(不带“www”前缀)