Итак, вот установка. У меня есть приложение Rails 3, развернутое на двух серверах, оба под управлением Apache2, оба с идентичными конфигурациями VirtualHost, оба работают на Passenger. В приложении Rails есть несколько маршрутов, для которых требуется выполнение запросов по SSL, поэтому я определил эти маршруты с помощью :protocol => 'https
как надо.
Эти два сервера являются частью пула балансировки нагрузки на нашем балансировщике нагрузки BigIP, причем один профиль настроен для обработки трафика порта 80, а другой - для обработки трафика порта 443. Мы приобрели сертификат и загрузили его в ящик BigIP, а также настроили профиль для сертификата, назначенный профилю: 443.
Мои конфиги Apache на каждом сервере идентично определяют ServerName
, DocumentRoot
, SetEnv
(для моей среды Rails), и все это джаз внутри <VirtualHost *:80 *:443>
декларация (обратите внимание, что при работе с этими файлами удаление *:443
немного поменял абсолютно ничего). В этом нет ничего необычного.
При просмотре этого сайта через порт 80 трафик проходит нормально и попадает в приложение Rails. При переходе на страницу входа, для которой требуется HTTPS, браузер просто сидит на ней и пытается связаться со страницей. В конце концов мой браузер дает мне сервер неожиданно разорвал соединение ошибка.
У меня такой вопрос: как BigIP отправляет SSL-трафик на серверы в своем пуле и как Apache должен это распознавать? Я даже не получаю записей в журналах Apache о том, что трафик попадает даже на два внутренних сервера. Есть ли что-то, что мне нужно изменить в конфигурации Passenger, чтобы разрешить этот трафик?
Если требуется больше информации, чем то, что я уже опубликовал, дайте мне знать, и я добавлю ее к этому вопросу. Похоже, в таких вещах я более экологичен, чем я думал!
Также; Поскольку я чувствую себя немного глупо в этом отношении, какой отличный ресурс поможет мне узнать, как веб-серверы обрабатывают запросы SSL?
Мой ответ похож на ERR0 ...
Если у вас есть частные VLAN, то вашему HTTP-серверу не обязательно прослушивать 443. Скорее, ваше приложение должно поддерживать обратный прокси-сервер и перенаправлять определенные страницы, например. / войдите в SSL / HTTPS-версию страницы.
Прочтите о HTTP-заголовках X-Forwarded-For и X-Forwarded-Proto.
Я не знаком с Rails, но, возможно, есть модуль, который сделает это за вас? т.е. позволяет указать, какие страницы следует перенаправлять на версию SSL / HTTPS.
Ура
Если вы загрузили сертификаты в F5 LTM и связали их с виртуальным сервером, который прослушивает порт 443, то F5 завершает SSL и передает HTTP-трафик в пул. Apache не будет видеть трафик SSL, только часть http в https. Вы можете использовать тот же пул, что и трафик порта 80.
Похоже, либо ваш сертификат не загружен должным образом в F5, либо профиль ssl не связан с вашим виртуальным сервером 443.