У меня есть два Jetty AppServer, работающие с веб-приложением Grails за обратными прокси-серверами Apache 2.2. Завершение SSL выполняется апачами, которые передают HTTP к серверам приложений Jetty.
Когда веб-приложение Grails выполняет перенаправление следующим образом
redirect(action:'index')
конечный пользователь получает запрос перенаправления HTTP 302 с полным URL-адресом, который использует протокол http://, а не https://:
HTTP/1.1 302 Found
Date: Tue, 08 Mar 2011 17:50:46 GMT
Server: Jetty(6.1.17)
Expires: Thu, 01 Jan 1970 00:00:00 GMT
Location: http://hostname.domain/web/?lang=en
Это раздражает, поскольку все HTTP-запросы перехватываются прокси-сервером и перенаправляются на HTTPS-запросы. Так что это ненужный туда-обратно.
Я вижу два решения:
- Apache mod_proxy может переписать этот Location-заголовок в https: // перед передачей ответа пользователю. (Может ли это?)
- Grails может просто не использовать абсолютные URL при перенаправлении:
Location: /web/?lang=en
Первый вариант немного глуп, я думаю, верно?
Есть ли у вас какие-либо идеи о том, как я могу получить grails для отправки не абсолютных заголовков перенаправления (в идеале, без необходимости переключать каждый редирект на использование uri:
)?
РЕДАКТИРОВАТЬ: В настоящее время у меня есть обходной путь после первого подхода путем изменения заголовков ответа (a2enmod headers
, затем добавьте Header edit Location ^http://(.*)$ https://$1
в <Location>
). Вдохновение приходит от этого сообщения о неисправности сервера . Я все еще хотел бы знать, почему это необходимо в первую очередь.