Ludovic Laly, mon blog

12:26

Un cache en tmpfs avec Nginx

Tout d'abord, créer le tmpfs, j’ajoute un dossier ramdisk0 dans tmp :

mkdir /tmp/ramdisk0

Ensuite dans le fstab, j'ajoute la ligne :

tmpfs /tmp/ramdisk0 tmpfs noatime,nosuid,size=100M,mode=1777 0 0

Je force la taille du tmpfs à 100Mo
Dans /etc/nginx/nginx.conf j'ajoute :

proxy_cache_path /tmp/ramdisk0 levels=1:2 keys_zone=rd0:100m;

Après keys_zone, je donne un nom à la zone de cache puis la taille. Étant donné que j'ai un tmpfs de 100Mo, je reprends cette valeur.
note: proxy_cache_path a comme contexte http, on veillera à bien mettre la ligne dans le bloc http { ... }

Maintenant le petit truc chiant (mais c'est logique en fait) avec le cache sur nginx, c'est que faisant partie de HttpProxyModule, il ne s'applique donc qu'à ce module

Nginx étant encore principalement utiliser comme reverse proxy devant apache, le problème ne se pose pas, mais j'ai fait le choix de complètement abandonner apache donc il m'a fallu ruser

L'idée c'est d’avoir un proxy nginx sur le port 80 qui va rediriger le trafic toujours vers nginx mais sur le port 8080

Donc c'est partit, je créer le proxy dans /etc/nginx/sites-enabled/
J'ajoute un fichier www.12h26.com qui contient

## le proxy
server {
            listen xxx.xxx.xxx.xxx;
            server_name www.12h26.com;

            proxy_cache rd0; #on reprend le nom de la zone indiquée dans le nginx.conf
            proxy_cache_valid 200 302 60m;
            proxy_cache_valid 404 1m;

            location / {
                        proxy_pass http://127.0.0.1:8080; # <- on redirige tout sur le localhost:8080
            }

}

## le serveur, maintenant c'est comme n'importe quel vhosts, la différence c'est qu'on écoute le port 8080
server {
            listen 127.0.0.1:8080;
            server_name www.12h26.com;

            root /path/www.12h26.com;

            location {
                        index index.html index.htm;
                        #etc...
            }
}

Derrière tout ça, un petit :

/etc/init.d/nginx reload

Et si tout est OK, on peut appeler une page et aller vérifier dans le dossier /tmp/ramdisk0 que les dossiers de cache sont bien présent