Apache Passenger 显示我的 Rails 应用程序内容吗?

Apache Passenger 显示我的 Rails 应用程序内容吗?

我已经在 Ubuntu 11.10 上为 Apache 安装了 mod_rails (phusion Passenger)。Ruby 和 Rails 运行良好,mod_rails 也运行良好。

我在 dev.localhost 上设置了一个网站,这是我的 ruby​​ 应用程序。该应用程序名为 my_project,位于 var/www/my_project

我的虚拟主机成功指向了我的 ruby​​ 应用程序的“公共”目录,它似乎可以正常工作。如果我访问 dev.localhost - 我的 ruby​​ 应用程序运行正常,没有任何抱怨。但是,如果我访问 localhost/my_project,则会显示我的整个 ruby​​ 应用程序,包括 Gemfile、控制器、所有目录 - 所有内容。它显示目录的内容。

我的 Rails 应用程序的虚拟主机文件:

<VirtualLHost *:80>
RailsEnv development
ServerName dev.localhost
DocumentRoot /var/www/my_project/public
</VirtualHost>

这是为什么?我搞不懂。我试过 .htaccess 文件,所有方法,但这些显然也反映在 dev.localhost 上。

我如何才能阻止人们看到 localhost/my_project 上的 ruby​​ 应用程序文件?它不会在 dev.localhost 上显示它,而是 100% 显示网站。

我在这里遗漏了什么?

答案1

您已将基于名称的 VirtualHost(通过使用ServerName dev.localhost)附加到所有接口上的端口 80,但尚未设置默认 VirtualHost,因此它使用主 DocumentRoot 配置(可能在/etc/apache2/conf/apache2.conf)。两个选项:

  • 替换并删除*:80选项,意味着此 VirtualHost 将处理端口 80 上的所有连接,而不管提供的标头是什么。_default_:80ServerNameHost:
  • 添加另一个sites-enabled文件,_default_:80该文件包含指向DocumentRoot包含页面的 VirtualHost,该页面告知用户此主机名上没有配置站点。如果您计划部署多个基于名称的 VirtualHost,这种方法具有前瞻性。

答案2

您的 apache2 配置中似乎有一个+Indexes设置。将此块添加到您的 VirtualHost 块(或添加到您的 httpd.conf)应该可以解决此问题。

<Directory "/var/www/my_project">
    Options -Indexes
</Directory>

这将覆盖+Indexes在 httpd 配置中某处设置的选项,以使所有 /var/www 内容可作为索引提供。

另外,不要考虑使用万能虚拟主机<VirtualLHost dev.localhost:80>

相关内容