Я использую единственный экземпляр эластичного бобового стебля. Итак, 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. Это один из способов исправить неработающие ссылки, отправленные приложением. Однако я бы ограничился приложениями, к которым у вас нет доступа.