У меня есть обратный прокси-сервер для доступа к стороннему приложению, расположенному внутри интрасети из Интернета. Допустим, это приложение находится на URL:
https://internalserver:8080/
(доступно только из интранета)
и прокси включен:
https://proxyserver/
(доступно из любой точки мира)
Прокси управляется nginx и работает нормально. Когда пользователь получает доступ, https://proxyserver/
он получает содержимое приложения по адресу https://internalserver:8080/
.
Проблема в том, что приложение записывает абсолютные URL-адреса в ответе HTML, поэтому, когда пользователь нажимает ссылку на новую страницу, браузер пытается найти страницу с ее внутренним именем, например,
https://internalserver:8080/somepage
вместо
https://proxyserver/somepage
.
Я знаю, что это программная ошибка, но я не могу изменить программу.
Могу ли я перехватить ответ, изменить URL-адреса и отправить его (измененный) конечному клиенту с помощью nginx? Или, может быть, с другим инструментом?
РЕДАКТИРОВАТЬ: Я видел этот вопрос раньше, но мой случай более конкретный, цитируемый вопрос попросить универсальную модификацию. В этом случае ad-hoc-программа fast-cgi является лучшим решением, и мне нужно более конкретное решение (я думаю) более распространенного сценария. В то время как программа fast-cgi может работать, я ищу более простое и, возможно, более сильное и проверенное в реальном мире решение для этого сценария.
Ответы:
Вот официальное видео Nginx на YouTube, которое демонстрирует переписывание встроенного контента.
https://youtu.be/7Y7ORypoHhE?t=20m22s
Действительно с sub_filter
http://nginx.org/en/docs/http/ngx_http_sub_module.html
В вашем случае вы смотрите на что-то вроде:
источник
http://nginx.org/en/docs/http/ngx_http_sub_module.html
источник