我有前端 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 应用程序,从而为它们的运行提供更大的灵活性。