Почему перенаправления с моего субдомена попадают в мой основной домен?

У меня есть собственный поддомен, который при использовании 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
Метод запроса: GET
Код состояния: 302 временно перемещено
Удаленный адрес: 172.19.х.189:443
Политика реферера: no-referer-when-downgrade

Заголовки ответа
Подключение: Keep-Alive
Длина контента: 0
Content-Type: text / html; кодировка =UTF-8
Дата: вторник, 27 ноября 2018 г. 18:29:15 GMT Keep-Alive: тайм-аут =15, максимум =97
Расположение: http: // main.example.com/Reporting
Set-Cookie: TS..01 =..... dae9; Path = /
Строгая транспортная безопасность: максимальный возраст =16070400; IncludeSubdomains

Когда запрос, исходящий из https:// custom.example.com/originUrl/SignOnPage, выполняет window.location.href = "/requiredUrl/GoToReporting", запрос попадает в HttpServlet в приложении java и содержит следующее:

URL-адрес запроса: http: // main.example.com/requestedUrl/GoToReporting. uri: / requiredUrl / GoToReporting.
хост: jbossappserver05:8080 реферер: https:// custom.example.com/originUrl/SignOnPage

x-forward-for: 172.17.x.19, 172.19.x.6
x-forwarded-host: custom.example.com
x-forwarded-server: localhost
соединение: Keep-Alive

Примечания. В моем примере я заменил доменные имена следующим образом: main.example.com - это основная целевая страница для большинства клиентов. Custom.example.com - это целевая страница, специфичная для конкретного клиента.

Страница GoToReporting выполняет SendRedirect (" http://main.example/.com/Reporting")

Я поместил пробелы в URL-адресах примеров, потому что я не могу иметь более 8 ссылок... Это не настоящие ссылки...

Альтернативные решения: Одним из "решений" проблемы было бы отключение реферера от запроса через Regex и добавление запроса uri вручную, но это неправильно и плохо по нескольким причинам. URL запроса уже неверен к тому времени, когда он попадает в Java.

Другой подход может состоять в том, чтобы изменить код Java, чтобы он не использовал sendRedirect(). Это работает для моей текущей ситуации, но у нас есть другие места, которые используют sendRedirect (), которые нужно будет решить, желательно не через Java.

Дополнительные материалы для чтения / ссылки: http://www.knowledgefolders.com/akc/display?url=DisplayNoteMpURL&reportId=1711&ownerUserId=satya

1 ответ

При использовании как F5, так и apache mod_rewrite и / или mod_proxy, где следует управлять конфигурациями обработки субдомена, перенаправления и / или SSL?

Пока вы решаете сделать это в одном месте, не имеет значения, где.

Моя личная рекомендация - F5, так как обычно веб-серверов и серверов приложений будет больше, чем просто Apache, и тогда все ваши политики будут согласованы независимо от возможностей ваших внутренних серверов.

Другие вопросы по тегам