Boucle de redirection même avec X-Forwarded-Proto
Bonjour,
Nous somme en train de configurer un serveur (avec un load balancer et cache)
Pound -> Varnish -> Apache -> CentOS.
Nous utilisons X-Forwarded-Proto pour transmettre l'information que nous somme
en https ou niveau en dessous de Pound.
Cela marche bien quand on accède directement une page comme https://example.com. Par contre, quand on accède une page comme http://example.com et que nous faisons une redirection vers https via PHP ou htaccess cela ne fonctionne pas. Nous avons alors une boucle de redirections.
Nous avons une solution qui fonctionne lorsque nous faisons la redirection en Javascript mais nous préférerions avoir une solution coté serveur.
Voici à quoi ressemble nos config:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
| ///////////////
// 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']);
}
//////////////
// pound config
//////////
User "pound"
Group "pound"
Control "/path/to/pound.cfg"
ListenHTTP
Address 0.0.0.0
Port 80
HeadRemove "X-Forwarded-Proto"
HeadRemove "X-Forwarded-For"
AddHeader "X-Forwarded-Proto: http"
RewriteLocation 2
End
ListenHTTPS
Address 0.0.0.0
Port 443
Cert "/path/to/pound.pem"
HeadRemove "X-Forwarded-Proto"
HeadRemove "X-Forwarded-For"
AddHeader "X-Forwarded-Proto: https"
End
Service
BackEnd
Address 0.0.0.0
Port 80
End
End |
Dans PHP, si je place
header("Location: https://example.com")
dans la réponse je vois:
HTTP/1.1 302 Found
Server: Apache
X-Powered-By: PHP/5.3 ZendServer/5.0
Location: http://example.com
Content-Type: text/html; charset=UTF-8
Content-Length: 0
Accept-Ranges: bytes
Date: Wed, 23 Jan 2013 04:58:22 GMT
X-Varnish: 1294094576
Age: 0
Via: 1.1 varnish
Connection: keep-alive
Donc le https est remplacer par http
J'ai cherché et posté sur plusieurs forums mais personne n'a encore trouver de solution.
Merci.