6

В моей локальной сети есть веб-сервер с URL-адресом https://10.0.0.22 и я пытаюсь получить к нему доступ через Интернет через обратный прокси-сервер nginx с URL-адресом, таким как https://domain.com/my/web/app ,

Трудность, с которой я столкнулся, заключается в том, что локальный сервер отправляет редирект 302 в /login.php , который затем nginx передает обратно в браузер внешнего клиента, чтобы стать https://domain.com/login.php вместо https://domain.com/my/web/app/login.php . Это приводит к ошибке 404, потому что на https://domain.com/login.php ничего нет.

Я пробовал много разных вариантов с небольшим успехом, включая широкий спектр директив rewrite , proxy_redirect и proxy_buffering , но это настолько близко, насколько я могу получить:

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

Есть ли способ настроить nginx так, чтобы перенаправление внутреннего веб-сервера 302 в /login.php внешне проявлялось как /my/web/app/login.php?

1 ответ1

6

После продолжения исследования и тестирования различных комбинаций и упорядочения директив добавление proxy_redirect после директивы proxy_pass видимому, решает проблему перевода URI:

 proxy_redirect https://10.0.0.22/ https://domain.com/my/web/app/;

После еще нескольких попыток кажется, что установка proxy_redirect в default по умолчанию делает то же самое неявно:

 proxy_redirect default;

Полный блок местоположения тогда выглядел так:

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

Однако изображения все еще были повреждены, поскольку они указывают на /images на локальном сервере. Я не уверен, как заставить nginx перевести их (потому что они встроены в тело HTML), но чтобы обойти проблему, я смог добавить выделенный блок location для /images перед блоком местоположения для /my/web/app , вот так:

    location ^~ /images/
    {
            proxy_pass https://10.0.0.22/images/;
            proxy_redirect default;
    } 

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