Как заставить nginx переписывать URI в содержимом тела HTTP?


13

Это продолжение моего предыдущего вопроса о том, как сделать так, чтобы обратный прокси-сервер 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.