У меня есть приложение front-end rails, которое обратное прокси для любого из множества приложений backend rails в зависимости от URL-адреса, например
http://www.my_host.com/app_one
обратные прокси в http://www.remote_host_running_app_one.com
таким образом, чтобы URL-адрес http://www.my_host.com/app_one/users
отобразит содержимое http://www.remote_host_running_app_one.com/users
У меня большое и постоянно увеличивающееся количество бэкэндов, поэтому их нельзя явно указать где-либо, кроме базы данных. Это не проблема для mod_rewrite с использованием обратного прокси-сервера prg: / rewrite.
Вопрос в том, что URL-адреса, возвращаемые помощниками rails, имеют вид /controller/action
делая их абсолютными для корня. Это проблема для страницы, обслуживаемой mod_rewrite, потому что ссылки на прокси-странице отображаются как абсолютные для домена. то есть:
http://www.my_host.com/app_one/controller/action
есть ссылки, которые выглядят как /controller/action/
когда им нужно выглядеть как /app_one/controller/action
mod_proxy_html кажется правильной идеей, но он не кажется таким динамичным, как мне нужно, поскольку правила должны быть жестко прописаны в файлах конфигурации.
Есть ли способ исправить это на стороне сервера, чтобы ссылки маршрутизировались правильно?
Вы можете попробовать использовать 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.
Вы можете посмотреть на единорог, пассажир или тонкий, чтобы запускать ruby-приложения, чтобы обеспечить большую гибкость при их запуске.