Bonjour à tous !

J'ai un petit problème avec Nginx ^^'

Ce que je fais

Actuellement, j'essaie de faire un petit reverse proxy avec Nginx qui serait capable de faire du cache pour les fichiers statiques. Voici mon code:

worker_processes 4;

events {

}

http{

    #
    server_tokens off;

    #optimisation de l'envoie de fichier
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;

    #log au minimum pour eviter trop d'ecriture
    access_log off;
    error_log logs/error.log emerg;

    #cache pour les fichiers statiques
    proxy_cache_path cache levels=1:2 keys_zone=my_zone:10m inactive=60m;
    proxy_cache_key "$scheme$request_method$host$request_uri";
    proxy_cache_valid 5m;
    proxy_ignore_headers "Set-Cookie";
    proxy_hide_header "Set-Cookie";
    proxy_pass_header Server;

    server{
        listen 3000;
        proxy_cache_lock on;
        proxy_cache_lock_age 5s;

        location ~* \.(?:css|js)$ {
                #permet de regarder le cache pour les fichiers statiques
                root **** ;
                proxy_ignore_headers X-Accel-Expires Expires Cache-Control Set-Cookie;
                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection 'upgrade';
                proxy_set_header Host $host;
                proxy_cache_bypass $http_upgrade;
                proxy_cache my_zone;
        }

        location / {  
            #permet de passer les requetes de nginx a node.js. Le serveur nginx agit comme un proxy qui passe ensuite les requetes à node.js
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection 'upgrade';
            proxy_set_header Host $host;
            proxy_cache_bypass $http_upgrade;

            proxy_pass http://localhost:8080; 
        }
    }
}

Je me suis juste permis de remplacer le chemin pour le root car il était un peu long :p
L'idée est que Nginx laisse passé toutes les requêtes vers l'application NodeJS, sauf pour les fichiers css et js où il doit vérifier qu'ils ne sont pas dans son cache.

Ce que je veux

J'aimerais que le cache fonctionne uniquement pour les fichiers css et js ^^

Ce que j'obtiens

J'ai testé ce code avec nginx -t et la commande n'a rien signalé de mauvais. J'ai donc testé en local, nginx passe bien les requêtes à mon application NodeJS. Cependant, lorsque je vais voir mon dossier cache, je ne vois rien dedans. Aucun fichier. Malgré le fait que j'appelle plusieurs fois mes fichiers css et js :/

Je remercie d'avance tout ceux qui m'aideront =D

1 réponse


Draserwang
Auteur
Réponse acceptée

J'ai trouvé le bug !
Dans la première location, il faut mettre l'instruction proxy_pass pour passer la requête au serveur NodeJS. Je pense que l'instruction proxy_cache faisait automatique ça, mais je me suis trompé :)

Voilà, j'espère que si quelqu'un tombe sur ce problème, cette solution l'aidera :)