Перенос куки через перенаправления при использовании Apache в качестве обратного прокси
Я пытаюсь настроить обратный прокси-сервер с помощью Apache на моем локальном компьютере, в моем httpd.conf есть следующее:
ProxyPass /app http://x.com
ProxyPassReverse /app http://x.com
Все отлично работает и просмотр к 127.0.0.1/app/* работает как положено. Проблема возникает, когда я перехожу к URL-адресу, который выполняет перенаправление на ресурс с тем же именем хоста, но с другим портом. Сначала я думал, что смогу справиться с этой ситуацией следующим образом:
ProxyPass /app:81 http://x.com:81
ProxyPassReverse /app:81 http://x.com:81
Но хотя это работает, куки не передаются через перенаправление. Как я могу получить куки для перенаправления? Кроме того, хотя порт на самом деле известен заранее, существует ли более надежный метод обработки этого, чтобы перенаправление на любой произвольный порт обрабатывалось правильно?
3 ответа
Вы не можете иметь спецификацию порта на ProxyPass /app:81
- вместо этого порт для прослушивания должен определяться VirtualHost
заблокировать что ProxyPass
проживает в.
Создать второй VirtualHost
установите порт 81, затем поместите ProxyPass /app http://x.com:81
внутри, чтобы получить поведение, которое вы ищете.
Ну, вы могли бы использовать номера "портов" в пути, просто не используйте ":".
ProxyPassReverse /app ht+p://x.com
ProxyPassReverse /app81 ht+p://x.com:81
Предполагая, что ваш сайт ht + p: //y.com:
y.com/app -> x.com
y.com/app81 -> x.com:81
Я предпочитаю использовать имена приложений на сервере. На самом деле у вас может быть много разных серверов приложений, но вы хотите, чтобы все веб-запросы выглядели так, как будто они пришли из одного места:
ProxyPassReverse /games ht+p://x.com:8080/games
ProxyPassReverse /finance ht+p://f.com:7000/money
ProxyPassReverse /movies ht+p://m.com:8001/cinema
y.com/games -> x.com:8080/games
y.com/finance -> f.com:7000/money
y.com/movies -> m.com:8001/cinema
Файлы cookie не обязательно распределяются между разными номерами портов. Это связано с плохо определенным поведением браузера, а не с настройкой обратного прокси.
Я предлагаю вам придерживаться порта 80 (или 443) для внешнего интерфейса и использовать разные пути URL вместо разных номеров портов.