Apache2 + Phusion Passenger - 不同的端口,或者所有页面都被覆盖

Apache2 + Phusion Passenger - 不同的端口,或者所有页面都被覆盖

我在 Apache2 上为多个 PHP 网站提供服务。现在,我还想使用 mod_passenger 为 Rails 应用程序提供服务。

问题是:当我将 mod_passenger 设置为监听 railsapp.com:81 时,它起作用了。PHP 网站也能正常工作。现在,如果我设置 railsapp.com:80,所有网站都会显示 rails 应用程序,不再显示 PHP 网站!

# cat phpsite.com
<VirtualHost *:80>
    ServerAdmin [email protected] 
    ServerName phpsite.com
    DocumentRoot /var/www/phpsite.com

    <Directory /var/www/phpsite.com>
        Order Deny,Allow
        Allow from all
    </Directory>
</VirtualHost>

# cat railsapp.com
<VirtualHost railsapp.com:81>
    ServerName railsapp.com
    DocumentRoot /var/railsapp.com/public   
    <Directory /var/railsapp.com/public>
         AllowOverride all
         Options -MultiViews
    </Directory>
</VirtualHost>

这样,rails 应用程序就可以在端口 81 上运行,而其他站点则可以在其“正常”地址上运行,即无需指定端口。当我将第二个文件更改为以下内容时:

# cat railsapp.com
    <VirtualHost railsapp.com:80>        #<-------------- 81 -> 80
        ServerName railsapp.com
        DocumentRoot /var/railsapp.com/public   
        <Directory /var/railsapp.com/public>
             AllowOverride all
             Options -MultiViews
        </Directory>
    </VirtualHost>

然后所有站点都会显示 railsapp,尽管它明确指出只在 railsapp.com:80 上监听。

有任何想法吗?

谢谢你,MrB

答案1

您的 VirtualHost 声明有点吓人。您确实不希望在 VirtualHost 标记中使用主机名“railsapp.com”。您需要一个 IP 地址或通配符。我建议您将所有 VirtualHost 设置为:

NameVirtualHost *:80
<VirtualHost *:80>
  ServerName railsapp.com
  ServerAlias www.railsapp.com
...

</VirtualHost>

<VirtualHost *:80>
  ServerName phpsite.com
  ServerAlias www.phpsite.com
...

</VirtualHost>

ServerAlias 很重要,因为在您提供的配置中,前面加上 www.*.com 的网站将转到默认VirtualHost,这是该接口:端口组合的第一个 VirtualHost。这可能是他们访问 rails 应用程序的原因。

编辑:更明确地说,任何与 VirtualHost 的 ServerName/ServerAlias 不匹配的 IP:Port 组合的连接都将转到该接口的默认 VirtualHost。出于这个原因,我通常有一个配置文件(在 debian 中,我将其放在 sites-enabled 中的 000-defualt.conf 中),它抓取所有不匹配的流量并将其发送到默认页面,如下所示:

<VirtualHost 10.1.2.3:80>

  DocumentRoot /var/www/bad-hostname/
  <Directory /var/www/bad-hostname>
    ....
  </Directory>

</VirtualHost>

这有助于调试基于名称的虚拟主机,并防止那些没有主机标头就访问我的 IP 的人看到服务器上的任何内容。

相关内容