我的 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 可能会与其重叠。