Назад | Перейти на главную страницу

Обратный прокси (mod_rewrite) и Rails (абсолютные пути)

У меня есть приложение 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-приложения, чтобы обеспечить большую гибкость при их запуске.