apache - balancer - x forwarded for example
Loop de redirección https incluso con X-Forwarded-Proto (2)
En mi caso, Varnish se configuró para normalizar las URL y eliminar el esquema y el dominio:
set req.url = regsub(req.url, "^http[s]?://[^/]+", "");
Para que la respuesta de redireccionamiento de http://example.com a https://example.com se guarde en caché y la solicitud a https://example.com devuelva esta respuesta en caché.
Eliminar esta normalización o agregar
hash_data(req.http.Https);
sub vcl_hash
ayudado.
Estamos construyendo un nuevo servidor con: Libra -> Barniz -> Apache -> CentOS.
Como Varnish no funciona en SSL, estamos configurando "X-Forwarded-Proto" en "https" en Pound y lo estamos detectando si estamos en https.
Está funcionando cuando accedemos directamente a una url como https://example.com, pero no cuando hacemos una redirección de "http" a "https" con "htaccess" o "PHP". Parece que X-Forwarded-Proto no se reenvía con la redirección. Así que nos quedamos atrapados en un ciclo infinito de redirección.
Hemos encontrado una manera de realizar la redirección con javascript, pero preferiríamos tener una solución del lado del servidor.
Entonces, nos preguntamos si hay un ajuste para cambiar en apache, libra, barniz, etc.
Hemos probado muchas soluciones como:
////////////////
// htaccess
////////////////////
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule (.*) https://example.com [L,R]
///////////////////
// php
//////////////////
if(isset($_SERVER[''HTTP_X_FORWARDED_PROTO'']) && $_SERVER[''HTTP_X_FORWARDED_PROTO''] == ''https''){
$_SERVER[''HTTPS'']=''on'';
}
if(!isset($_SERVER[''HTTPS'']) || $_SERVER[''HTTPS''] != ''on''){
header(''Location: ''. ''https://''.$_SERVER[''HTTP_HOST''].$_SERVER[''REQUEST_URI'']);
}
Our pound config look like:
//////////////////
// pound
///////////////
ListenHTTPS
Address 0.0.0.0 # all interfaces
Port 443
AddHeader "X-Forwarded-Proto: https"
HeadRemove "X-Forwarded-Proto"
HeadRemove "X-Forwarded-For"
Cert "/path/to/certificate.pem
Service
BackEnd
Address 10.0.0.1
Port 80
Priority 1
End
End
End
¡Hemos pasado mucho tiempo en ese problema gracias a ayudarnos!
Como se señaló anteriormente:
Tuvimos que:
- Ponga
RewriteLocation 0
enListenHTTPs
- Solucionar un problema de nombre de dominio en la configuración
ListenHTTPS
ReWriteLocation 0