Root请求解析为错误的VirtualHost

时间:2012-12-19 18:50:59

标签: apache wildcard virtualhost

我有两个在Apache服务器后面运行的网站。

其中一人向api.xyzzy.com提出请求

另一个提供任何其他流量(数十个域,子域等),因此是一个无所不包的通配符。

使用下面的配置,请求http://api.xyzzy.com/下的深层链接...转到正确的虚拟主机(第一个),但是http://api.xyzzy.com/的顶级请求加载第二个全部而是通配符虚拟主机。

我在这里做错了什么?

LoadModule passenger_module /home/webby/.rvm/gems/ruby-1.9.3-p286/gems/passenger-3.0.18/ext/apache2/mod_passenger.so
PassengerRoot /home/webby/.rvm/gems/ruby-1.9.3-p286/gems/passenger-3.0.18
PassengerRuby /home/webby/.rvm/wrappers/ruby-1.9.3-p286/ruby

NameVirtualHost *:80

<VirtualHost *:80>
        ServerName api.xyzzy.com
        ServerAlias api.xyzzy.com
        RailsEnv production
        DocumentRoot /home/webby/rails/current/public
</VirtualHost>

<VirtualHost *:80>
        ServerAlias *
        <Directory /usr/local/xyzzy/webapps/wwwroot >
                Options Indexes MultiViews
                AllowOverride None
                Order allow,deny
                Allow from all
        </Directory>
        DocumentRoot /usr/local/xyzzy/webapps/wwwroot
</VirtualHost>

更新

以下配置似乎正在按预期工作。这是基于@Winfield的答案。

看来我的测试可能出错了。我的浏览器(Chrome)可能已使用https(非http)前缀自动填写我输入的地址。不幸的是,在尝试了几十种配置排列之后我才注意到这种异常现象,因此很难说出最终的正确分辨率是什么。我应该在命令行上使用curl进行更可靠的测试,而不是在浏览器栏中输入。

<VirtualHost *:80>
        <Directory /usr/local/xyzzy/webapps/wwwroot >
                Options Indexes MultiViews
                AllowOverride None
                Order allow,deny
                Allow from all
        </Directory>
        DocumentRoot /usr/local/xyzzy/webapps/wwwroot
</VirtualHost>

<VirtualHost *:80>
        ServerAlias api.xyzzy.com
        RailsEnv production
        DocumentRoot /home/webby/rails/current/public
</VirtualHost>

1 个答案:

答案 0 :(得分:2)

我认为最好使用“默认”虚拟主机(首先定义)来解决此问题,而不是使用通配符虚拟主机。您可以交换订单并填写正确的服务器名称。这应该是非API主机名命中默认(第一)vhost和任何与主机名匹配的API来命中api vhost。像这样:

<VirtualHost *:80>
        ServerName www.xyzzy.com
        ServerAlias xyzzy.com
        <Directory /usr/local/xyzzy/webapps/wwwroot >
                Options Indexes MultiViews
                AllowOverride None
                Order allow,deny
                Allow from all
        </Directory>
        DocumentRoot /usr/local/xyzzy/webapps/wwwroot
</VirtualHost>

<VirtualHost *:80>
        ServerName api.xyzzy.com
        ServerAlias api.xyzzy.com
        RailsEnv production
        DocumentRoot /home/webby/rails/current/public
</VirtualHost>