我正在运行一个 AWS 设置,它目前由指向单个 EC2 实例的 ELB 组成。该实例运行的是 Ubuntu 12.04.2 和 Apache 2.22.2。我过去在服务器上设置了几个子域。我今天想再设置一个,但我绞尽脑汁想找出我错过了什么。我确信这是我忽略了或做得不太正确的一些小步骤。
我的 DNS 记录是使用 Route 53 设置的。我登录到 AWS 控制台并为我的服务器添加了一条新的 CNAME 记录。我们将其称为samael.example.com
。它看起来像这样:
samael.example.com. 3600 IN CNAME web-pool-xxxxxxxxxx.us-east-1.elb.amazonaws.com.
这似乎运行得很好,因为指向我的浏览器就会sameael.example.com
调出默认的 VirtualHost。
所以,我现在要做的就是创建另一个 VirtualHost 配置文件,正确的?
mkdir /http/www/samael.example.com
touch /httpd/www/samael.example.com/index.html
cd /etc/apache2/sites-available
sudo cp dav.example.com samael.example.com
sudo sed -i 's/dav.example.com/samael.example.com/g' samael.example.com
cd ../sites-enabled
sudo ln -s ../sites-available/samael.example.com
sudo apachectl restart
就是这样,正确的?但是当我将浏览器指向 时samael.example.com
,它仍然指向默认的 VirtualHost。我跳过了哪个步骤?
cat samael.example.com
<VirtualHost *:80>
ServerName samael.example.com
ServerAdmin webmaster@localhost
DocumentRoot /httpd/www/samael.example.com
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /httpd/www/samael.example.com>
Options FollowSymLinks
AllowOverride All
Order allow,deny
allow from all
</Directory>
ErrorLog /var/log/apache2/samael.example.com-error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog /var/log/apache2/samael.example.com-access.log combined
编辑:
根据评论中的要求:
sudo apache2ctl -S
VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:80 is a NameVirtualHost
default server dav.example.com (/etc/apache2/sites-enabled/dav.example.com:1)
port 80 namevhost dav.example.com (/etc/apache2/sites-enabled/dav.example.com:1)
port 80 namevhost dev.example.com (/etc/apache2/sites-enabled/dev.example.com:1)
port 80 namevhost example.com (/etc/apache2/sites-enabled/example.com:1)
port 80 namevhost new.example.com (/etc/apache2/sites-enabled/new.example.com:1)
port 80 namevhost samael.example.com (/etc/apache2/sites-enabled/samael.example.com:1)
port 80 namevhost stage.example.com (/etc/apache2/sites-enabled/stage.example.com:1)
port 80 namevhost test.example.com (/etc/apache2/sites-enabled/test.example.com:1)
Syntax OK
对我来说,这个输出有点令人费解。我期望默认值是example.com
而不是dav.example.com
。 的配置文件example.com
已ServerAlias *
在其中定义。
答案1
您的 vhost 配置文件可能无法被 apache 看到,可能是因为缺少 include 指令,或者缺少权限。
确保在你的主配置文件中有一个类似的指令
Include /etc/apache2/sites-enabled/*
如果它在条件块中,例如<IfDefine VHOSTS>
,确保条件计算为真(例如,通过确保指定了正确的定义或加载了正确的模块)。
此外,确保运行 apache 的用户(通常是 apache)有权读取文件并枚举 sites-enabled 目录。具体来说,它需要读取和执行 sites-enabled 目录,并读取 sites-enabled 中的所有配置文件。
根据您的编辑,您使用的指令很可能ServerAlias *
令人困惑。这不是指定默认虚拟主机的方法。默认虚拟主机具有基于名称的虚拟托管,仅在没有其他虚拟主机匹配(ServerAlias 或 ServerName)时使用,并且只是按字母顺序加载的第一个虚拟主机。这dav.example.com
很可能是选择主机的方式。为了克服这个问题,通常将预期的虚拟主机配置文件命名为 00_default_vhost.conf 之类的名称。
匹配也是按照文件读取的顺序进行的。因此,任何未匹配dav.example.com
或dev.example.com
将匹配example.com
通配符别名的站点。