Змінення HTML-сторінок, повернених зворотним проксі-сервером nginx


17

У мене є зворотна настройка проксі-сервера для доступу до стороннього додатку, розташованого всередині інтрамережі з Інтернету. Скажімо, ця програма є за URL-адресою:

https://internalserver:8080/ (доступний лише з інтрамережі)

і проксі-сервер увімкнено:

https://proxyserver/ (Доступний з будь-якого місця в світі)

Проксі керується nginx і працює нормально. Коли користувач отримує доступ, https://proxyserver/ він отримує вміст програми на https://internalserver:8080/.

Проблема полягає в тому, що програма записує абсолютні URL-адреси у відповідь HTML, тому, коли користувач натискає посилання на нову сторінку, браузер намагається знайти сторінку з її внутрішнім іменем, наприклад https://internalserver:8080/somepage замість https://proxyserver/somepage.

Я знаю, що це помилка в програмі, але я не в змозі змінити програму.

Чи можу я перехопити відповідь, змінити URL-адреси та надіслати її (модифіковану) кінцевому клієнту за допомогою nginx? А може, з іншим інструментом?

EDIT: Це питання я бачив і раніше, але мій випадок є більш конкретним, питання, яке цитується, вимагає загальної модифікації. У такому випадку спеціальна програма швидких програм є найкращим рішенням, а те, що я хочу, є більш конкретним рішенням (я думаю) більш поширеного сценарію. в той час як програма швидкої CGI може працювати, я шукаю найпростіший і, можливо, сильніший і зарекомендував себе в реальному світі, рішення цього сценарію.


Відповіді:



3

http://nginx.org/en/docs/http/ngx_http_sub_module.html

Модуль ngx_http_sub_module - це фільтр, який модифікує відповідь, замінюючи одну задану рядок іншою.

Цей модуль не побудований за замовчуванням, його слід включити за допомогою параметра конфігурації --with-http_sub_module.

Приклад конфігурації

sub_filter      </head>
    '</head><script language="javascript" src="$script"></script>';
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.