Ludovic Laly, mon blog

12:26

Jouer avec les cookies dans Nginx

Ce blog est hébergé sur une dedibox, pour mes dev perso j'y fait cohabiter une prod et une preprod. Mon besoin était de pouvoir basculer rapidement entre les deux, mais aussi de garder la même url (je n'ai jamais été fan des sous domaine public :)).
Quoi de mieux qu'un simple cookie ?
l'idée c'est que par défaut Nginx utilise le dossier de prod, et si jamais un cookie est présent et contient la bonne valeur, il utilise celui de preprod

le fichier de configuration Nginx réduit au stict minimum

server {
    root   /www/prod;
    location / {
        if ($http_cookie ~ "devel=true") {
            root /www/devel;
        }
    }
    location /secret/set {
        add_header Set-Cookie "devel=true;Domain=.12h26.com;Path=/;Max-Age=31536000";
        return 301 http://www.12h26.com;
    }
    location /secret/del {
        add_header Set-Cookie "devel=;Domain=.12h26.com;Path=/;Max-Age=-1";
        return 301 http://www.12h26.com;
    }
}

Un cookie au final ce n'est qu'un header envoyé au navigateur, donc il est tout à fait possible d'en créer un directement à partir d'une url
il me suffit d'appeler dans mon navigateur 12h26.com/secret/set pour qu'un cookie soit déposé et 12h26.com/secret/del pour qu'il soit effacé
Et enfin dans le location / un test permet d'indiquer un autre dossier root