Spip derrière Varnish : port non-standard dans l'URL ?
Bonjour,
Je me permet de faire une suite au ticket 3386 car j'ai encore le problème sur des sites en 3.2.1 à jour avec svn.
Quand j'active le cache chez mon hébergeur, cela rajoute des ports 80 dans les chemin d'image et du coup le site perds la css et les images dans le BO de SPIP
Je cite mon hébergeur :
De mémoire, j'ai fait la même chose que pour le dernier site, c'est-à-dire ajouté un bout de code dans le fichier de configuration du site (sauf que pour l'autre site, je l'ai mis dans le index.php à la place).
C'est le code là :
if ($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') { $_SERVER['HTTPS']='on'; $_SERVER['SERVER_PORT'] = 443; } if (isset($_SERVER['HTTP_X_FORWARDED_HOST'])) { $_SERVER['HTTP_HOST'] = $_SERVER['HTTP_X_FORWARDED_HOST']; }
La subtilité avec Varnish est que Varnish renvoi sur le port non HTTPS de Apache donc certaines variables renvoyés par Apache ne correspondent pas à la réalité. C'est à dire : HTTPS, SERVER_PORT, REQUEST_SCHEME C'est pour cela que des headers supplémentaires HTTP_X_FORWARDED_PROTO, HTTP_X_FORWARDED_HOST comme sont passés.
Il faut également faire attention avec le "SERVER_PORT", quelque chose de 443 peut aussi être du HTTPS, dans notre cas, c'est 4430 par exemple car un reverse proxy écoute déjà le 443 normal. (sauf que dans ce cas précis, le reverse proxy renvois sur le port SSL d'apache).
En résumé, il y a deux cas différents:
- reverse proxy écoute sur SSL (443) : renvoi sur le port SSL d'apache (4430, le port choisi est arbitraire). Généralement cela pose pas de problème car cela passe par le circuit HTTPS d'apache.
- reverse proxy écoute sur SSL (443) : renvoi sur le port HTTP d'apache (8080 par exemple), en passant des headers supplémentaires (HTTP_X_FORWARDED_PROTO par exemple). C'est du "offload" de SSL, cela passe par le circuit HTTP d'apache donc certaines variables peuvent être définie différemment. L'application hébergé doit contrôler les headers supplémentaires et essayer de "détecter" cela.
Un réglage via mes_options serait jouable ?
Merci