我的 Apache 配置出了什么错误?

我的 Apache 配置出了什么错误?

我正在运行一个 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.comServerAlias *在其中定义。

答案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.comdev.example.com将匹配example.com通配符别名的站点。

相关内容