12

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

1 ответ1

5

Единственное решение, которое я нашел до сих пор, - это HttpSubsModule (см. Также страницу github).

Модуль не является частью официальных источников Nginx, поэтому вам, вероятно, потребуется собрать Nginx самостоятельно, чтобы использовать этот модуль.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .