У меня есть собственный поддомен, который при использовании Java HttpServletResponse :: sendRedirect () перенаправляется на наш основной (под) домен, и я не уверен, почему. Пользователи по адресу https: // custom.example.com/originUrl/SignOnPage перенаправляются на https: // main.example.com/requestedUrl/GoToReporting, где у них нет сеанса и они выходят из системы.
Мой вопрос: При использовании как F5, так и apache mod_rewrite и / или mod_proxy, где следует управлять обработкой субдоменов, перенаправлением и / или конфигурациями SSL? Без явной записи / удаления конфигураций, специфичных для поддоменов, какие изменения могут привести к тому, что это перестанет работать?
Подробности: Моя текущая теория заключается в том, что причиной того, что перенаправление перестало работать, было что-то связанное с SSL / HTTPS / HSTS, вероятно, в F5. Согласно приведенной ниже ссылке, sendRedirect () превращает HTTPS в HTTP, и, похоже, когда это происходит, HTTP-соединение восстанавливается в «основном» домене. У меня нет доступа к конфигурации F5, и я очень мало о ней знаю. Отдел, управляющий F5, настаивает на том, что в F5 ничего не изменилось и что все, что влияет на это перенаправление, должно быть вызвано изменениями кода Java или Apache и должно быть решено с помощью этих средств. Я думаю, они ошибаются. Помогите, пожалуйста, уточнить.
В Apache мы используем mod_proxy, mod_rewrite и несколько других модулей, которые мог влияют на это, но в каких-либо файлах конфигурации apache нет ссылок на какие-либо (под) доменные имена. Тем не менее, я все равно пытался реализовать RewriteConds и RewriteRules, чтобы предотвратить изменение поддоменов, но это не повлияло (я, вероятно, делал что-то не так ... материал [P] / [R, L] сбивает с толку, и я Я на 95% уверен, что вокруг этого ничего не изменилось).
Проблема не в коде Java. В коде Java ничего не изменилось (кроме этого или влияющих на это, проверено тестированием сборки годичной давности). Но я могу легко решить возникшую проблему на Java (см. Альтернативные решения ниже).
Детали и диагностика: Браузер видит:
Общее
URL-адрес запроса: https: // custom.example.com/requested/url/GoToReporting
Метод запроса: ПОЛУЧИТЬ
Код состояния: 302 Перемещено временно
Удаленный адрес: 172.19.x.189: 443
Политика реферера: без реферера при понижении рейтингаЗаголовки ответа
Подключение: Keep-Alive
Content-Length: 0
Тип содержимого: текст / html; charset = UTF-8
Дата: Вт, 27 ноября 2018 г. 18:29:15 GMT Keep-Alive: тайм-аут = 15, максимум = 97
Расположение: http: // main.example.com/Reporting
Set-Cookie: TS..01 = ..... dae9; Путь = /
Строгая безопасность транспорта: max-age = 16070400; includeSubDomains
Когда запрос, исходящий из https: // custom.example.com/originUrl/SignOnPage, выполняет window.location.href = "/ requestedUrl / GoToReporting", запрос попадает в HttpServlet в приложении Java и содержит следующее:
URL запроса: http: // main.example.com/requestedUrl/GoToReporting URI запроса: / requiredUrl / GoToReporting
хост: jbossappserver05: 8080 референт: https: // custom.example.com/originUrl/SignOnPagex-forwarded-for: 172.17.x.19, 172.19.x.6
x-forwarded-host: custom.example.com
x-форвард-сервер: локальный хост
соединение: Keep-Alive
Ноты: В моем примере я заменил доменные имена следующим образом: main.example.com - это основная целевая страница для большинства клиентов custom.example.com - это целевая страница, специфичная для конкретного клиента
Страница GoToReporting выполняет SendRedirect ("http: //main.example .com / Отчетность ")
Я помещаю пробелы в примеры URL, потому что у меня не может быть больше 8 ссылок ... Это не настоящие ссылки ...
Альтернативные решения: Одним из «решений» проблемы было бы исключить референт из запроса через Regex и вручную добавить URI запроса, но это неправильно и плохо по нескольким причинам. URL-адрес запроса уже неверен к тому моменту, когда он попадает в Java.
Другой подход может заключаться в изменении кода Java, чтобы не использовать sendRedirect (). Это работает для моей текущей ситуации, но у нас есть и другие места, которые используют sendRedirect (), которые нужно будет решить, желательно не через Java.
Дополнительная литература / ссылки: http://www.knowledgefolders.com/akc/display?url=DisplayNoteMpURL&reportId=1711&ownerUserId=satya
При использовании как F5, так и apache mod_rewrite и / или mod_proxy, где следует управлять обработкой субдоменов, перенаправлением и / или конфигурациями SSL?
Пока вы решите сделать это в одном месте, не имеет значения где.
Моя личная рекомендация - это F5, так как обычно будет больше веб-серверов и серверов приложений, чем только Apache, и тогда у вас будут согласованы все ваши политики независимо от возможностей ваших внутренних серверов.