ruby-on-rails - 通过路径前缀代理对虚拟主机的请求

标签 ruby-on-rails apache torquebox

我正在 TorqueBox 上运行多个 Rails 应用程序。每个应用程序都安装在不同的 Web 上下文上,例如 localhost:8080/app1 和 localhost:8080/app2 (通过 TorqueBox 配置)。 Apache 配置为通过虚拟主机接受对 app1.domain.comapp2.domain.com 的请求。但是,我遇到了一些应用程序路径(表单提交路径等)期望以 /app1 开头的问题,例如 http://app1.domain.com/app1/rest/of/path 而不是正确的 http://app1.domain.com/rest/of/path

如何配置 Apache,以便向 http://app1.domain.com/app1/... 发出请求到正确的路径(即,没有前导 /app1)?我尝试过使用重定向来执行此操作,但这不起作用,因为它们强制执行 GET 请求,并且 POST 数据在此过程中丢失。

这是我当前的 Apache 配置:

LoadModule proxy_module /usr/lib/apache2/modules/mod_proxy.so
LoadModule proxy_http_module /usr/lib/apache2/modules/mod_proxy_http.so
ProxyRequests Off
ProxyPreserveHost On
NameVirtualHost *:80

<VirtualHost *:80>  # There are multiple vhosts like this one, for different apps.
    ServerName app1.domain.com
    ProxyPass / http://127.0.0.1:8080/app1/
    ProxyPassReverse / http://127.0.0.1:8080/app1/
</VirtualHost>

最佳答案

我通过在 TorqueBox 配置中使用 Web 主机而不是 Web 上下文解决了这个问题。之后,让 Apache 配置正常工作就没有问题了,因为不同的应用程序不在特定的上下文路径下。

所以,而不是这个(在config/torquebox.rb中):

TorqueBox.configure do
  web do
    context '/app1' 
  end
end

你应该这样做:

TorqueBox.configure do
  web do
    host 'app1.domain.tld'
  end
end

关于ruby-on-rails - 通过路径前缀代理对虚拟主机的请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20292781/

相关文章:

ruby - 从 Gemfile 中找出哪些 gems 需要 native c 扩展?

ruby-on-rails - rails : How to test code in the lib/directory?

ruby-on-rails - 以任何方式将隐藏字段放入具有belongs_to 关联的资源的表单中

PHP 在任何输出之前吐出一个新行

jboss - 用于高性能/关键任务应用程序的 JRuby/TorqueBox

mysql - Ruby:Rails:MRI 和 JRuby

ruby-on-rails - 结合 Octopress 和 Rails 4.0 应用程序?

apache - 禁用 apache 上的目录列表;但应允许访问单个文件

apache - gss_acquire_cred 返回 key 表条目未找到错误