Птн, 19 Ноя 2010 11:55:31 +0400The Apple Geek

Модификация URL при проксировании в Apache

]]>

Оригинал новости

]]>

Я периодически использую в Apache модуль mod_proxy_http для проксирования трафика с одного frontend’а на различные backend’ы. Конфигурация, которая перебрасывает запросы с http://company.com/news/ на внутренний сервер http://internal.company.com/ такая:

ProxyPass        /news/  http://internal.company.com/ProxyPassReverse /news/  http://internal.company.com/

Всё работает хорошо, до тех пор, пока на внутреннем сервере вместо относительных URL вида “/css/style.css” не появляются абсолютные URL “http://internal.company.com/css/style.css”. В этом случае html возвращается внешнему клиенту, он пытается взять css/js или перейти по внутреннему адресу http://internal.company.com, который недоступен из Интернет, и на этом всё заканчивается. Страницы не отображаются, ссылки не работают.

Приходилось выкручиваться с прописыванием внешних URL на внутренних серверах, это рождало проблемы доступа из внутренней сети. Они лечились Split DNS (внутренним и внешним клиентам отдавались на один запрос разные имена). Всё это рождало дополнительные сложности, в итоге с трудом поддерживалось и диагностировалось.

Сегодня мне снова понадобилось решить эту задачу. Провёл изучение текущего состояния вопроса и нашёл отличное решение – mod_substitute, который к тому же входит в стандартную поставку Apache 2.2 и не требует компиляции из сторонних исходников.

Теперь конфигурация выглядит примерно так:

ProxyPass        /news/  http://internal.company.com/ProxyPassReverse /news/  http://internal.company.com/AddOutputFilterByType SUBSTITUTE text/htmlSubstitute "s|http://internal.company.com/|http://company.com/news/|in"

Замечу – нагрузка на сервер минимальна, нужно переписывать только text/html. Для других случаев понадобится более расширенная конфигурация. Но направление решения вопроса я показал, от чего-то уже можно оттолкнуться.

Ctrl ←Ctrl →
Share
iPhone 4S — привозим первыми и не наглеем
Техника Apple в магазине на Facebook

© 2007—2012 Макдак. Россия.

© Все права на новости принадлежат соответствующим источникам.


 Андрей Шипилов — идея, дизайн, вёрстка, программирование и поддержка.

 
]]>
]]>