Comment puis-je vérifier que nginx sert la version .gz des fichiers statiques, s'ils existent?
J'ai compilé nginx avec le module statique gzip, mais je ne vois aucune mention de la version .gz servie dans mes journaux. (J'ai minifié les fichiers global.js et global.css avec des versions .gz d'eux dans le même répertoire).
La partie pertinente de nginx.conf ressemble à ceci:
gzip on;
gzip_static on;
gzip_http_version 1.0;
gzip_disable "MSIE [1-6]\.";
gzip_vary on;
gzip_comp_level 2;
gzip_proxied any;
gzip_types text/plain text/html text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript;
Tout pointeur serait apprécié.
Utilisez strace. Tout d'abord, vous devez détecter le PID du processus nginx:
# ps ax | grep nginx
25043 ? Ss 0:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
25044 ? S 0:02 nginx: worker process
Ok, donc 25044 est le processus de travail. Maintenant, nous le traçons:
# strace -p 25044 2>&1 | grep gz
open("/var/www/css/ymax.css.gz", O_RDONLY|O_NONBLOCK) = 438
open("/var/www/css/patches/patch_my_layout.css.gz", O_RDONLY|O_NONBLOCK) = -1 ENOENT (No such file or directory)
open("/var/www/yaml/core/iehacks.css.gz", O_RDONLY|O_NONBLOCK) = -1 ENOENT (No such file or directory)
open("/var/www/js/koznazna5.js.gz", O_RDONLY|O_NONBLOCK) = -1 ENOENT (No such file or directory)
open("/var/www/css/ymax.css.gz", O_RDONLY|O_NONBLOCK) = 216
Comme vous pouvez le voir, il essaie de trouver des versions de fichiers .gz.
Modifiez le contenu du fichier non compressé. Et puis touch
les deux fichiers (simultanément — c'est-à-dire: dans la même instanciation de touch
). Si lorsque vous chargez le fichier dans un navigateur (effacé du cache), vous obtenez le fichier non modifié, alors nginx a servi le fichier à cache statique gzippé.
Un moyen simple d'éviter "est-ce que je viens de récupérer le cache?" les soucis sont de récupérer à partir de la ligne de commande avec curl
car curl ne cache pas.
Je voudrais désactiver la compression automatique et enregistrer gzip_ratio
:
http {
gzip off;
gzip_static on;
log_format log_with_ratio "... $gzip_ratio ...";
server {
access_log /var/log/nginx/file.log log_with_ratio;
}
}
Notez que vous pouvez remplacer gzip
, gzip_static
et access_log
par niveau de serveur et d'emplacement.
Il y a un indice que j'ai remarqué concernant l'en-tête de réponse ETag
.
Si le fichier statique est servi par nginx, l'en-tête ressemble à ceci: ETag: "135a-BQhu6KL71dyeCXcVZme6ug"
, cependant, lorsque nginx compresse la réponse (via le module gzip), cela ressemble à ceci: ETag: W/"135a-BQhu6KL71dyeCXcVZme6ug"
(remarquer W/
).
Vous pouvez l'utiliser aussi bien que Content-Encoding: gzip
pour distinguer les fichiers statiques simples, les fichiers statiques précompressés et les fichiers compressés à la volée.