Назад | Перейти на главную страницу

Как изменить http на https при перенаправлении tomcat

Я использую единственный экземпляр эластичного бобового стебля. Итак, apache настроен, а tomcat прослушивает http-порт 8080. Apache настроен на использование ssl https 443.

Проблема в том, что tomcat перенаправляет с помощью http. Но я не могу настроить apache для изменения http на https. Как следствие, возникает ошибка смешанного содержимого, мешающая работе приложения.

Я пробовал пока следующие настройки: В виртуальном хосте *: 80 Я поставил

<IFModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{SERVER_NAME}/%$1 [R, L]
</IFModule>

Также я пробовал

RedirectMatch ^(/.*)$ https://thepennantrace.com/$1

Оба не работали.

Интересно, как правильно его настроить? (приложение работает через facebook, при прямом доступе не будет никаких ошибок)

Директива, которая меняет http в перенаправлении на https является ProxyPassReverse и соответствующая конфигурация:

<virtualhost *:80>
redirect   permanent  /    https://example.com
</virtualhost>

<virtualhost *:443>
ProxyPass        /app/     http://my-tomcat:8080/app/
ProxyPassReverse /app/     http://my-tomcat:8080/app/

...
## don't use ProxyPreserveHost ON as it breaks ProxyPassReverse

</virtualhost>

Да, вы могли бы сделать это, используя RewriteEngine но это сложно и поэтому нечитабельно.

Вы можете решить эту проблему на уровне приложения. Вы должны прокладывать полный путь к новому месту. Он должен состоять из трех компонентов: протокола (https), имени хоста (из заголовка запроса) и пути (в соответствии с требованиями приложения). Вам может понадобиться служебный класс, который создает ссылки для приложения для обеспечения согласованности.

Для ссылок вы можете использовать относительные пути. Они будут отправлены исходному хосту с использованием протокола, по которому они прибыли.

Перенаправление запроса, полученного в результате перенаправления, по-прежнему оставляет вам смешанный контент. Это потому, что первоначальное перенаправление будет http, а не https.

На уровне сервера Apache есть модуль, который переписывает пути в ответе с http на https. Это один из способов исправить неработающие ссылки, отправленные приложением. Однако я бы ограничился приложениями, к которым у вас нет доступа.