Я работаю над установкой со следующими конфигурациями
Балансировщик нагрузки -> Веб-сервер Apache (2) -> Приложение, развернутое на tomcat (5 узлов путем кластеризации)
В развернутом приложении у нас есть некоторые защищенные разделы, к которым необходимо получить доступ в режиме HTTPS, мы пытаемся использовать разгрузку SSL, установив сертификат SSL на уровне балансировщика нагрузки.
вот конфигурации сервера Apache Listen 80
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host.example.com
DocumentRoot /var/www/html/
ServerName prod.mysite.com
LogLevel warn
ErrorLog logs/prod.mysite.com-error_log
CustomLog logs/prod.mysite.com-access_log common
Include conf/sf.conf
</VirtualHost>
ProxyPass /favicon.ico !
ProxyErrorOverride On
ProxyStatus On
ProxyRequests Off
ProxyBadHeader Ignore
ProxyPass / balancer://cluster/
ProxyPassReverse / balancer://cluster/
<Proxy balancer://cluster>
BalancerMember ajp://xxx.xx.xx.xx:48009 route=node1 keepalive=On ping=3 retry=3
BalancerMember ajp://xxx.xx.xx.xx:48009 route=node2 keepalive=On ping=3 retry=3
BalancerMember ajp://xxx.xx.xx.xx:48009 route=node3 keepalive=On ping=3 retry=3
ProxySet stickysession=JSESSIONID|jsessionid lbmethod=byrequests timeout=300 nofailover=On
</Proxy>
остальные конфигурации являются очень стандартными конфигурациями Apache, сертификат SSL правильно установлен на балансировке нагрузки.
Когда я открываю свое приложение в режиме HTTP, все работает нормально, но когда приложение пытается перенаправить в режим SSL (страницы https), я получаю бесконечную ошибку перенаправления.
Я проверил файлы журнала, кажется, что базовое приложение перенаправляет клиента в режим HTTPS, а веб-сервер apache снова отправляет запрос как HTTP, что вызывает бесконечное перенаправление.
Я не уверен, где я делаю не так, или какая часть процесса настроена неправильно.
Может ли кто-нибудь помочь мне понять основную причину
Основная причина заключается в том, что с балансировщиком нагрузки, выполняющим SSL, ВСЕ запросы к защищенному разделу сайта будут поступать как HTTP, даже когда клиент использует SSL. Оболочка SSL удаляется балансировщиком нагрузки, и запрос поступает в apache как обычный HTTP-запрос и снова перенаправляется на SSL, вызывая бесконечный цикл перенаправлений.
Решение - перенаправить на основе x-forwarded-proto
заголовок, который большинство балансировщиков нагрузки добавляют к запросам для решения именно этой проблемы.
т.е. если x-forwarded-proto=http
перенаправить на HTTPS или если x-forwarded-proto=https
продолжай как обычно
видеть https://stackoverflow.com/questions/26620670/apache-httpx-forwarded-proto-in-htaccess-is-causing-redirect-loop-in-dev-envir как это сделать на ваших сайтах .htaccess
file, но поиск в Google поможет найти способы сделать это на других платформах и языках.