反向代理(mod_rewrite)和Rails(绝对路径)

反向代理(mod_rewrite)和Rails(绝对路径)

我有前端 rails 应用程序,它根据 URL 反向代理任意数量的后端 rails 应用程序,例如

http://www.my_host.com/app_one反向代理http://www.remote_host_running_app_one.com

这样的 URLhttp://www.my_host.com/app_one/users将显示以下内容http://www.remote_host_running_app_one.com/users

我有大量且不断增加的后端,因此它们无法在数据库之外的任何地方明确列出。这对于使用 prg:/rewrite map 反向代理的 mod_rewrite 来说没有问题。

问题是,rails 帮助程序返回的 URL 具有/controller/action使其绝对指向根的形式。这对于 mod_rewrite 提供的页面来说是一个问题,因为代理页面上的链接对于域而言是绝对的。即:

http://www.my_host.com/app_one/controller/action链接最终看起来像/controller/action/ 这样/app_one/controller/action

mod_proxy_html 似乎是正确的想法,但它似乎并不像我需要的那样动态,因为规则需要硬编码到配置文件中。

有没有办法修复服务器端这个问题,以便链接能够被正确路由?

答案1

您可以尝试使用 ProxyPass 和 ProxyPassReverse。

ProxyPass /app_one http://www.remote_host_runing_app_one.com
ProxyPassReverse /app_one http://www.remote_host_running_app_one.com

但是你最好在命名的目录下运行你的 ruby​​ 应用程序并直接反向代理,而不是通过重写来更改 uri。

您可以查看 unicorn、passenger 或 thin 来运行 ruby​​ 应用程序,从而为它们的运行提供更大的灵活性。

相关内容