Como você mencionou. enquanto o Varnish não manipula o SSL, é possível usar um proxy de terminação SSL que passa para o Varnish. O proxy de terminação SSL pode adicionar ou remover cabeçalhos e alterar portas, portanto você deve ser capaz de criar um fluxo que evite loops de redirecionamento.
Os proxies populares de terminação SSL são Pound, Stunel, Nginx e HAProxy. O intervalo de recursos que você precisa deve determinar qual você usa. Versões recentes do Nginx e do HAProxy permitem que você use o SPDY e, após uma pesquisa rápida, eu diria que existem atualmente guias mais atualizadas para usar Nginx e Varnish do que os outros balanceadores.
Para o Nginx como um proxy de terminação SSL, o seguinte é comumente sugerido:
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;
}
}
Isso está tomando SSL da porta 443, descriptografando e passando para a porta 80 do localhost. Ele está adicionando o cabeçalho X-Forwarded-Proto https
, que indica que este é (era?) Tráfego SSL. A configuração também adiciona outros cabeçalhos que ajudam na leitura de registros, etc.
Com o Varnish escutando em localhost: 80, ele processará o pedido como o tráfego normal, passando-o para o Apache & Joomla
No Apache, você precisará de SetEnvIfNoCase X-Forwarded-Proto https HTTPS=on
.
Tudo isso junto deve significar que o Joomla descobre o que está acontecendo e se comporta de maneira apropriada.