Як змусити nginx переписати URI у вмісті тіла HTTP?


14

Це продовження мого попереднього питання про те, як зробити nginx зворотного проксі-сервера 302 до підпапки URI замість root .

У мене є проксі-сервер nginx, який використовує директиви rewriteта proxy_passдирективи для проксі зовнішніх запитів до URL-адреси, наприклад, https://domain.com/my/web/app/до внутрішнього сервера локальної мережі в https://10.0.0.22/. Ось моя спроба представити переклад у ASCII UML:

                                    .-------------.       .------------------.
                                    | Nginx proxy  |      | Local web server |
                                    | (domain.com) |      | (10.0.0.22)      |
                                    '-------------'       '------------------'
                                               |                 |
                                               |                 |
GET https://domain.com/my/web/app/ ----------->|                 |
                                               |---------------->| GET /
                                               |                 |
                                               |<----------------| 302 redirect /login.php
302 redirect /my/web/app/login.php <-----------|                 |
                                               |                 |
GET https://domain.com/my/web/app/login.php -->|                 |
                                               |---------------->| GET /login.php
                                               |                 |
                                               |<----------------| 200
HTML body content (images, CSS, links) <-------|

Ось фактичний блок розташування у моєму файлі конфігурації nginx:

location ^~ /my/web/app/
{
    proxy_buffering   off;
    rewrite           /my/web/app/(.*) /$1 break;
    proxy_pass        https://10.0.0.22/;
    proxy_redirect    default;
}

Він чудово підходить для перекладу URI між внутрішнім та зовнішнім шляхами URI для HTTP-запитів та відповідей, але будь-які URI-вмісти у вмісті HTML (зображення тіла, CSS, сценарії) не перекладаються.

Наприклад, зображення із відносними шляхами, вбудованими у відповідь HTML, з URI, такими як /images/logo.png, повертаються назад до веб-клієнта та інтерпретуються як https://domain.com/images/logo.pngзамість https://domain.com/my/web/app/images/logo.png.

Я можу зрозуміти, чому це відбувається, але було б чудово, якби існував спосіб динамічного проксі-вмісту, а також запитів. Чи є спосіб отримати nginx для конвертування URI, вбудованих у вміст HTML? Чи можна динамічно розбирати та оновлювати вміст HTML під час проходження через проксі-сервер?


2
Ви знайшли рішення? Якщо так, чи можете ви опублікувати це як відповідь?
Гюйгенс

Відповіді:


5

Єдине рішення цього рішення, яке я знайшов поки що, - це HttpSubsModule (див. Також сторінку github ).

Модуль не є частиною офіційних джерел Nginx, тому вам, мабуть, потрібно буде самостійно створити Nginx, щоб використовувати цей модуль.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.