forwarded for example balancer aws apache https centos varnish

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 en ListenHTTPs
  • Solucionar un problema de nombre de dominio en la configuración

ListenHTTPS ReWriteLocation 0