Я использую wicket 8.10, он установлен на tomcat и проксируется nginx. SSL-сертификаты настроены в конфиге nginx. Также Nginx перенаправляет все HTTP-запросы на HTTPS.
Проблема следующая:
Когда я отправляю любую форму, калитка возвращает заголовки ответа, где тег Location содержит URL-адрес с протоколом HTTP.
Почему это важно:
Последнее обновление Chrome заставляет браузер показывать предупреждение, когда местоположение содержит протокол HTTP на странице, открытой по HTTPS. До этого nginx незаметно перенаправлял запрос, но теперь пользователь видит страницу с предупреждением из браузера (аналогично тому, когда сертификат недействителен или отсутствует).
Проблема здесь в том, что ваше приложение Wicket не знает, что оно находится за прокси.
Есть два решения:
Он завершит HttpServletRequest Tomcat тем, который читает X-Forwarded-***
заголовки запросов.
Просто убедитесь, что Nginx экспортирует X-Forwarded-Proto
заголовок запроса.
Просто перезапишите 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