Назад | Перейти на главную страницу

nginx как исправить путь из ответа перенаправления внутреннего сервера в виртуальный каталог

Ниже перечислены мои развернутые серверы:

клиент ------ прокси nginx (example.com) ------ внутренний сервер (192.168.1.20)

Внешний URL-адрес прокси-сервера nginx был настроен в виртуальном каталоге http://example.com/demo/ Внутренний сервер был настроен на http://192.168.1.20:8080/

следующее было частью файла конфигурации nginx:

    location /demo {
            proxy_pass      http://192.168.1.20:8080/;
            proxy_redirect  default;
            proxy_set_header        Host            $http_host;
            proxy_set_header        X-Real-IP       $remote_addr;
            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
    } 

Когда внутренний сервер отправляет ответ перенаправления (HTTP CODE 302) с полем заголовка LOCATION "http://192.168.1.20/subdir/", nginx сопоставляет это поле заголовка LOCATION с"http://example.com/subdir/ ", а не отверженный"http://example.com/demo / subdir/ "

Ваш прокси-пропуск не требует завершающей косой черты:

proxy_pass      http://192.168.1.20:8080;

Завершающая косая черта удаляет "демо" из URL.

Бэкэнд-приложение должно знать о виртуальном хостинге, таком как Zope virtual host monster и другие решения, в основном оно должно знать, что оно находится за виртуальным / прокси-сервером, и соответственно переписывать внутренние URL-адреса, перезаписывать и т. Д.

По крайней мере, внутреннее приложение должно записывать свои перезаписи и URL-адреса относительно внешнего пути. В этом примере внутреннее приложение, вероятно, отправляет перенаправление на /subdir вместо того /demo/subdir.