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

Разгрузка SSL с помощью Apache и tomcat, дающая бесконечный цикл | mod_proxy_ajp

Я работаю над установкой со следующими конфигурациями

Балансировщик нагрузки -> Веб-сервер 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>

sf.conf

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 поможет найти способы сделать это на других платформах и языках.