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

Joomla за сервером кеширования с SSL

У меня проблемы с настройкой кеш-системы для работы с Joomla 3.x. Это особенно проблема, поскольку сервер должен обеспечивать HTTPS / TLS-соединения.

Система Joomla работает на Apache2 на Debian Wheezy.

Я пытался настроить Varnish, но заметил, что Varnish не может прервать трафик TLS, поэтому мне нужно было направить его обратно на Apache или HAProxy. Но если я это сделаю, Joomla запутается с заголовками запросов, которые переписываются, пока запрос проходит через все эти уровни, и Joomla либо застревает в цикле перенаправления, либо отвечает с ошибками сервера.

Есть ли чистый способ поставить кеш даже балансировщик нагрузки перед Joomla без тех проблем с перенаправлением, которые возникают из-за завершения SSL, происходящего на другом сервере?

Как вы упомянули. пока Varnish не поддерживает SSL, можно использовать завершающий прокси SSL, который передает Varnish. Прокси-сервер завершения SSL может добавлять или удалять заголовки и изменять порты, поэтому вы сможете создать поток, который избегает петель перенаправления.

Популярные прокси для завершения SSL - это Pound, Stunel, Nginx и HAProxy. Набор необходимых функций должен определять, какие из них вы используете. Последние версии Nginx и HAProxy позволяют использовать SPDY, и после быстрого поиска я бы сказал, что в настоящее время есть более современные руководства по использованию Nginx и Varnish, чем другие балансировщики.

Для Nginx в качестве прокси завершения SSL обычно предлагается следующее:

server {
        listen 443 ssl;

        server_name example.com;
        ssl_certificate /etc/nginx/ssl/nginx.crt;
        ssl_certificate_key /etc/nginx/ssl/nginx.key;

        location / {
            proxy_pass http://127.0.0.1:80;
            proxy_set_header X-Real-IP  $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto https;
            proxy_set_header X-Forwarded-Port 443;
            proxy_set_header Host $host;
        }
}

Это берет SSL с порта 443, расшифровывает и передает его на порт 80 localhost. Это добавляет X-Forwarded-Proto https заголовок, указывающий, что это (был?) трафик SSL. Конфигурация также добавляет другие заголовки, которые помогают читать журналы и т. Д.

При прослушивании Varnish на localhost: 80 он будет обрабатывать запрос как обычный трафик, передавая его в Apache и Joomla.

В Apache вам понадобится SetEnvIfNoCase X-Forwarded-Proto https HTTPS=on.

Все это вместе должно означать, что Joomla понимает, что происходит, и ведет себя соответствующим образом.