Как настроить mod pagespeed для страниц SSL
У нас есть веб-сайт, например http://www.acb.com что указывает на аппаратный балансировщик нагрузки, который должен балансировать нагрузку на два выделенных сервера. Каждый сервер работает под управлением apache в качестве интерфейса и использует mod_proxy для пересылки запроса tomcat.
некоторые страницы нашего сайта требуют SSL, как https://www.abc.com/login или https://www.abc.com/checkout
SSL завершается в аппаратном балансировщике нагрузки.
Когда Я настроенный mod_pagespeed сжал, свернул и объединил css-файл и переписал их с абсолютным url http://www.abc.com/css/merged.pagespeedxxx.css вместо относительного url / css / merged.pagespeedxxx.стиль CSS.
Он отлично работает для страниц без ssl, но когда я перехожу на страницу ssl, такую какhttps://www.abc.com/login все css и JS файлы блокируются браузером, как chrome, поскольку их абсолютный url-адрес не использует ssl.
Как я могу решить этот вопрос ?
2 ответов
проверить https
строка в этой документация и этот.
вы должны показать нам в своем вопросе ваш текущий ModPagespeedMapOriginDomain
&&ModPagespeedDomain
настройки.
из того, что я понимаю из этих строк:
origin_specified_in_html может указать https, но origin_to_fetch_from может указать только http, например
ModPagespeedMapOriginDomain http://localhost https://www.example.com
эта директива позволяет серверу принимать запросы https дляwww.example.com не требуя SSL-сертификата для извлечения ресурсов -фактически, это единственный способ mod_pagespeed может обслуживать https-запросы, поскольку в настоящее время он не может использовать https для извлечения ресурсов. Например, учитывая приведенное выше сопоставление и предполагая, что Apache настроен для поддержки https, mod_pagespeed будет извлекать и оптимизировать ресурсы, доступные с помощью
https://www.example.com
, извлечение ресурсов изhttp://localhost
, который может быть тем же процессом Apache или другой серверный процесс.
а эти:
mod_pagespeed предлагает ограниченную поддержку сайтов, которые обслуживают контент через https. Существует два механизма, с помощью которых mod_pagespeed можно настроить для обслуживания https-запросов:
- используйте ModPagespeedMapOriginDomain для сопоставления домена https с доменом http.
- используйте ModPagespeedLoadFromFile для сопоставления локально доступного каталога с https домен.
решение будет чем-то вроде этого (или с ModPagespeedLoadFromFile
)
ModPagespeedMapOriginDomain http://localhost https://www.example.com
но, реальная проблема для вас в том, что apache не получает запросы HTTPS напрямую как балансировщик нагрузки оборудования обрабатывает его самостоятельно. Таким образом, выходной фильтр mod-pagespeed даже не знает, что он был запрошен для домена SSL. И когда он изменяет содержимое HTML, применяя перезапись домена, возможно, он не может обработайте случай https.
так... один решение (непроверенный) будет использовать другой virtualhost на сервере apache, все еще HTTP, если хотите, посвященный обработке https. Все связанные с https url (/login
,/checkout
,...) затем будет перенаправлен на это конкретное доменное имя аппаратным балансировщиком нагрузки. Скажем http://secure.acb.com
. Это имя используется только между балансировщиком нагрузки и передними апачами (и, безусловно, apache должен ограничить доступ к этому VH к нагрузке только балансир).
тогда в этих http://secure.acb.com
virtualhosts mod_pagespeed будет настроен для внешней перезаписи доменов в https://www.example.com
. Что-то вроде:
ModPagespeedMapOriginDomain http://secure.example.com https://www.example.com
наконец, запрос конечного пользователя https://www.example.com/login
, балансировщик нагрузки управляет HTTPS, поговорите с apache с http://secure.example.com
, а результаты страницы содержат только ссылки на https://www.example.com/*
активы. Теперь, когда активы тезисов запрашиваются с запросом домена https, у вас все еще есть проблема обслуживания активов тезисов. Так и аппаратной балансировщик нагрузки должен разрешить url всех активов тезисов в домене https и отправить их в http://secure.abc.com
virtualhosts (или любой другой статический VH).
похоже, вы настроили переписанный URL как http://www.abc.com/css/merged.pagespeedxxx.css
yourself-therefor: попробуйте использовать относительный URL-адрес протокола, например remove http:
и просто //www.abc.com/css/merged.pagespeedxxx.css
- это будет использовать тот же протокол, что и запрошенная страница встраивания.
одна из хорошо стандартизированных, но относительно неизвестных функций URLs