stable.example.com

stable.example.com

我的 VPS 上有两个子域名,我已在我的 DNS 中注册了指向同一 IP 地址的两个子域名。

安装的版本是服务器版本:Apache/2.4.7 for Ubuntu 12.04。

我已经使用命令启用了站点a2ensite,并且启用了模块vhost_alias。重新启动并重新加载多次

stable.example.com

<VirtualHost *:80>        
    ServerName stable.example.com

    DocumentRoot /var/www/stable/web

    <Directory /var/www/stable/web>
            Options Indexes FollowSymLinks Includes
            AllowOverride All
            order allow,deny
            Allow from all
    </Directory>
</VirtualHost>

beta.example.com

<VirtualHost *:80>

    ServerName beta.example.com

    DocumentRoot /var/www/beta/web

    <Directory /var/www/beta/web>
            Options Indexes FollowSymLinks Includes
            AllowOverride All
            order allow,deny
            Allow from all
    </Directory>
</VirtualHost>

service apache2 reload我的麻烦是将我的浏览器指向任何 url 时我总是得到相同的内容,并且当我在两个子域中执行时我获得来自的内容beta.example.com并且当我在两个子域中执行时service apache2 restart我获得的内容时更加令人困惑stable.example.com

我花了大约 5 个小时尝试修复此问题

更新

我尝试使用VirtualDocumentRoot

<Virtualhost *:80>
    VirtualDocumentRoot "/var/www/%1/web"
    ServerName stable.example.com
    ServerAlias *.example.com
    UseCanonicalName Off
    <Directory "/var/www/*">
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>
</Virtualhost>

与本次更新之前解释的行为相同

更新 2

我没有虚拟主机重叠,每个虚拟主机都有唯一的名称和唯一的 DocumentoRoot,即使我有定义<VirtualHost _defaut_:80>

我检查一下apachectl -S

VirtualHost configuration:
*:80                   is a NameVirtualHost
         default server XXX.XXX.XXX.XXX (/etc/apache2/apache2.conf:220)
         port 80 namevhost XXX.XXX.XXX.XXX (/etc/apache2/apache2.conf:220)
         port 80 namevhost beta.example.com (/etc/apache2/sites-enabled/beta.conf:1)
         port 80 namevhost stable.example.com (/etc/apache2/sites-enabled/stable.conf:1)
ServerRoot: "/etc/apache2"
Main DocumentRoot: "/var/www"
Main ErrorLog: "/var/log/apache2/error.log"
Mutex watchdog-callback: using_defaults
Mutex rewrite-map: using_defaults
Mutex default: dir="/var/lock/apache2" mechanism=fcntl 
Mutex mpm-accept: using_defaults
PidFile: "/var/run/apache2/apache2.pid"
Define: DUMP_VHOSTS
Define: DUMP_RUN_CFG
User: name="www-data" id=33
Group: name="www-data" id=33

答案1

我在本地运行多个虚拟主机时遇到了这个问题-使用:

NameVirtualHost *

代替:

NameVirtualHost *:80

在 http-vhosts.conf 文件中为我修复了这个问题。

答案2

更新

这可能是由 apache2.conf 引起的

default server XXX.XXX.XXX.XXX (/etc/apache2/apache2.conf:220)

你应该发布你的 apache2.conf

httpd.conf(或 apache.conf 或 apache2.conf,取决于发行版)

确保您拥有以下信息:

LoadModule vhost_alias_module modules/mod_vhost_alias.so

NameVirtualHost *:80

确保主配置中没有其他 NameVirtualHost 指令。

httpd-vhosts.conf

<VirtualHost *:80>        
    ServerName stable.mydomain.com
    DocumentRoot /var/www/stable/web
    UseCanonicalName on
    <Directory /var/www/stable/web>
        Options Indexes FollowSymLinks Includes
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

<VirtualHost *:80>

    ServerName beta.mydomain.com

    DocumentRoot /var/www/beta/web
    UseCanonicalName on
    <Directory /var/www/beta/web>
        Options Indexes FollowSymLinks Includes
        AllowOverride All
        order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

还要确保默认的 httpd.conf 配置不包含任何定义的服务器,因为 vhosts 可能会与其重叠。

相关内容