Fichier d’index NGINX Serve précompressé sans source

J’ai trouvé un problème intéressant.

J’essaie de servir des fichiers compressés sans les sources en utilisant le module gzip_static de NGINX (je connais les inconvénients de ceci). Cela signifie que vous pouvez avoir des fichiers compressés sur le serveur qui seront servis avec transfer-encoding: gzip. Par exemple, s’il y a un fichier /foo.html.gz, une demande pour /foo.html sera envoyée au fichier compressé avec content-encoding: text / html.

Bien que cela fonctionne généralement, il s’avère que lorsque vous recherchez des fichiers d’index dans un répertoire, les versions compressées ne sont pas sockets en compte.

GET /index.html 200 GET / 403 

Je me demandais si quelqu’un sait comment résoudre ce problème. J’ai essayé de définir index.html.gz comme fichier d’index mais il est utilisé comme fichier gzip plutôt que comme fichier html encodé avec gzip.

Cela ne fonctionnera clairement pas de cette façon.

Ceci fait partie de la source du module:

  if (r->uri.data[r->uri.len - 1] == '/') { return NGX_DECLINED; } 

Donc, si l’URI se termine par une barre oblique, il ne recherche même pas la version compressée.

Mais, vous pourriez probablement contourner l’utilisation de la réécriture. (Ceci est une supposition, je ne l’ai pas testé)

 rewrite ^(.*)/$ $1/index.html; 

Edit: Pour que cela fonctionne avec autoindex (devinez), vous pouvez essayer d’utiliser ceci au lieu de réécrire:

 location ~ /$ { try_files ${uri}/index.html $uri; } 

C’est probablement mieux que d’utiliser la réécriture. Mais vous devez essayer …