Как избежать перенаправления страницы Wicket с HTTPS на HTTP

Я использую wicket 8.10, он установлен на tomcat и проксируется nginx. SSL-сертификаты настроены в конфиге nginx. Также Nginx перенаправляет все HTTP-запросы на HTTPS.

Проблема следующая:

Когда я отправляю любую форму, калитка возвращает заголовки ответа, где тег Location содержит URL-адрес с протоколом HTTP.

Почему это важно:

Последнее обновление Chrome заставляет браузер показывать предупреждение, когда местоположение содержит протокол HTTP на странице, открытой по HTTPS. До этого nginx незаметно перенаправлял запрос, но теперь пользователь видит страницу с предупреждением из браузера (аналогично тому, когда сертификат недействителен или отсутствует).

Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
2
0
424
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Проблема здесь в том, что ваше приложение Wicket не знает, что оно находится за прокси.

Есть два решения:

  1. используйте XForwardedRequestWrapperFactory

Он завершит HttpServletRequest Tomcat тем, который читает X-Forwarded-*** заголовки запросов. Просто убедитесь, что Nginx экспортирует X-Forwarded-Proto заголовок запроса.

  1. используйте HttpsMapper

Просто перезапишите protected Scheme getDesiredSchemeFor(Class<? extends IRequestablePage> pageClass), чтобы вернуть Scheme.HTTPS в режиме ПРОДУКЦИЯ и Scheme.HTTP в режиме РАЗРАБОТКИ (я предполагаю, что вы не используете прокси-сервер Nginx во время разработки)

Ответ принят как подходящий

Самое простое решение, которое я нашел, — использовать директиву nginx:

proxy_redirect http://example.com https://example.com;

Он меняет заголовок местоположения с http://example.com/any/path на https://example.com/any/path

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