Ниже перечислены мои развернутые серверы:
клиент ------ прокси 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
.