Это продолжение моего предыдущего вопроса о том, как сделать так, чтобы обратный прокси-сервер 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 при его прохождении через прокси-сервер?
источник
Ответы:
Единственное решение, которое я нашел до сих пор, - это HttpSubsModule (см. Также страницу github ).
Модуль не является частью официальных источников Nginx, поэтому вам, вероятно, потребуется собрать Nginx самостоятельно, чтобы использовать этот модуль.
источник