0

我在 Ubuntu 上使用 apache mod_wsgi 托管的烧瓶应用程序发生了一些奇怪的事情。我有一个虚拟主机设置,我的烧瓶应用程序已导入其中。我的虚拟主机是 /etc/apache2/sites-available/ 并且已启用。文件是这样的:

<VirtualHost *:80>
    ServerName domain1.com

    WSGIDaemonProcess app user=flask group=www-data threads=5 home=/var/www/app
    WSGIScriptAlias / /var/www/app/app.wsgi

    <Directory /var/www/app>
        WSGIProcessGroup app
        WSGIApplicationGroup %{GLOBAL}
        WSGIScriptReloading On
        Order deny,allow
        Allow from all
    </Directory>
</VirtualHost>

当我使用 domain1.com 访问它时,我的应用程序运行良好。但是,如果我有一个 CNAME 记录指向 domain1.com 的 domain2.com,我可以在访问 domain2.com 时查看目录和文件。同样,当我将 ServerName 更改为 domain2.com 时,从 domain1.com 可以看到目录列表。

有人建议我编辑 httpd.conf 文件并删除 Indexes 条目或将其更改为 -Indexes 以关闭目录浏览但文件为空。我希望该应用程序仅在 ServerName 中指定的域中工作,而不是从指向它的任何其他域名中工作。请指教。

4

2 回答 2

0

给出的建议是正确的,但我相信在 Ubuntu 上,默认虚拟主机位于 /etc/apache2/apache2.conf 或 /etc/apache2/sites-available/default 中。发生的事情是因为两个域都解析为相同的 ip,因此 domain2 选择了默认的 Apache 配置,因为它没有自己的虚拟主机。

您也可以通过将 domain1 的文档根目录移动到不同的位置来防止这种情况,但在任何情况下关闭索引都是一个好主意。

于 2014-01-06T03:14:06.433 回答
0

对于第二个域名,由于 Apache 找不到匹配的 VirtualHost,它将回退到使用在解析配置时找到的第一个 VirtualHost 定义。

有关在稍微不同的上下文中对此的解释,请参见:

阅读“回退到默认 VirtualHost 定义”部分。

如果您希望阻止所有其他域名,请将默认 VirtualHost 更改为:

<VirtualHost _default_:*>
Deny from all
</VirtualHost>
于 2014-01-06T03:37:58.887 回答