У меня есть обратный прокси-сервер настройки в Apache следующим образом:
Сервер A с адресом www.example.com/folder является обратным прокси-сервером.
Он сопоставляется с: Сервер B с адресом test.madeupurl.com
Этот вид работ. Но у меня проблема в том, что на www.example.com/folder все относительные ссылки имеют форму www.example.com/css/examplefilename.css, а не www.example.com/folder/css/examplefilename. CSS
Как я могу это исправить?
Пока мой обратный прокси-сервер имеет это на сервере A (www.example.com):
<Location /folder>
ProxyPass http://test.madeupurl.com
ProxyPassReverse http://test.madeupurl.com
</Location>
linux
apache-2.2
reverse-proxy
Трудоголик
источник
источник
Ответы:
Apache ProxyPassRewrite не переписывает тела ответов, полученные с http://test.example.com , а только заголовки (например, перенаправления на страницу 404 и т. Д.).
Ряд альтернатив:
Один ) Перепишите внутреннее приложение, чтобы использовать относительные пути вместо абсолютных. т.е.
../css/style.css
вместо/css/style.css
2 )
/folder
Повторно разверните внутреннее приложение в том же подкаталоге, а не в корне test.example.com.Три ) Один и два часто маловероятны ... Если вам повезло, внутреннее приложение использует только два или три подкаталога, и они не используются на вашем основном сайте , просто напишите несколько строк ProxyPass:
Четыре ) Создайте отдельный поддомен для внутреннего приложения и просто переверните все прокси:
Пять ) Иногда разработчики
совершенно невежественные иимеют свои приложения не только генерировать абсолютный URL, но даже включать имя хоста часть в их URL, и результирующие HTML код выглядит следующим образом :<img src=http://test.example.com/icons/logo.png>
.A ) Вы можете использовать комбинированное решение DNS с разделением горизонта и сценария 4. Как внутренние, так и внешние пользователи используют test.example.com, но ваш внутренний DNS указывает непосредственно на ip-адрес сервера test.example.com. Для внешних пользователей общедоступная запись test.example.com указывает на IP-адрес вашего общедоступного веб-сервера www.example.com, и вы можете использовать решение 4.
B ) На самом деле вы можете заставить apache не только запрашивать прокси на test.example.com, но и переписать тело ответа, прежде чем оно будет передано вашим пользователям. (Обычно прокси переписывает только HTTP заголовки / ответы). mod_substitute в apache 2.2. Я не проверял, хорошо ли он сочетается с mod_proxy, но, возможно, работает следующее:
источник
<img src=/folder/icons/button.png>
которые в очередь будет пойманаProxyPass /folder/ http://test.madeupurl.com/folder/
директивой.href="../css/custom.css"
а неhref="/css/custom.css"
. Когда пользователь Интернета извлечет страницу, URL-адрес будет www.example.com/folder/content/index.html. Тогда URL для css будет:www.example.com/folder/content/../css/custom.css
который на самом делеwww.example.com/folder/css/custom.css
будет перенаправленtest.madeupurl.com/css/custom.css
.В дополнение к ответу HBruijn , если вы выбираете решение (3) «ProxyPass», вам, возможно, придется также использовать mod_proxy_html, чтобы переписать некоторые URL-адреса на ваших HTML-страницах.
ср Как правильно обрабатывать относительные URL с помощью обратного прокси-сервера для некоторых примеров.
В качестве прикладного примера, вот как вы можете настроить Apache, используя
ProxyHTMLURLMap
правило для пересылки всего с your-domain-name.com/pad на ваш экземпляр Etherpad, работающий локально на порту 9001:<Location /pad> ProxyPass http://localhost:9001 retry=0 # retry=0 => avoid 503's when restarting etherpad-lite ProxyPassReverse http://localhost:9001 SetOutputFilter proxy-html ProxyHTMLURLMap http://localhost:9001 </Location> RewriteRule ^/pad$ /pad/ [R]
источник
SetOutputFilter
&ProxyHTMLURLMap
.Вы можете использовать следующий способ создания обратного прокси:
1. Установите mod_proxy_html
Загрузить модуль mod_proxy_html
И используйте следующие настройки
Надеюсь, это поможет.
источник