gzip_ratio n'imprime pas dans les journaux nginx

Je configure le nginx access_log en sortie au format JSON pour l'utiliser avec d'autres outils.

Les données que je souhaite incluent des informations sur la compression. J'ai gzip sur, mais la seule chose que je reçois pour le gzip_ratio est - .

Pour confirmer, la var incorporée est $gzip_ratio .

http://nginx.org/fr/docs/http/ngx_http_gzip_module.html

Voici la définition de mon log_format :

 log_format main_json '{"time": "$time_iso8601", ' '"remote_addr": "$remote_addr", ' '"body_bytes_sent": "$body_bytes_sent", ' '"gzip_ratio": "$gzip_ratio", ' '"status": "$status", ' '"request": "$request_time", ' '"request_method": "$request_method", ' '"http_referrer": "$http_referer", ' '"http_user_agent": "$http_user_agent", ' '"http_x_forwarded_for": "$http_x_forwarded_for", ' '"request_time": "$request_time", ' '"upstream_response_time": "$upstream_response_time"}'; 

Voici les parameters gzip dans nginx.conf :

 gzip on; gzip_proxied any; gzip_types text/plain text/xml text/css application/x-javascript text/javascript application/xml+rss text/json application/json; 

Et voici la sortie dans access_log :

 { "time":"2015-02-03T14:26:26+00:00", "remote_addr":"[IP]", "body_bytes_sent":"574", "gzip_ratio":"-", "status":"200", "request":"0.064", "request_method":"GET", "http_referrer":"-", "http_user_agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2293.0 Safari/537.36", "http_x_forwarded_for":"-", "request_time":"0.064", "upstream_response_time":"0.064" } 

Donc, il semble que les choses ne soient pas compressées. Cependant, j'ai exécuté cURL pour tester la compression et voici les résultats:

 [~]$ curl https://[URL] --silent --write-out "size_download=%{size_download}\n" --output /dev/null size_download=3297 [~]$ curl https://[URL] --silent -H "Accept-Encoding: gzip,deflate" --write-out "size_download=%{size_download}\n" --output /dev/null size_download=859 

Donc, en réellement mesurer la taille de la réponse, il semble qu'il soit compressé. Cependant, les journaux manquent encore de gzip_ratio . Le body_bytes_sent dans le journal de chaque requête correspond aux octets signalés par cURL (légère variation avec réponse compressée).

 {"time": "2015-02-03T14:57:11+00:00", "remote_addr": "[IP]", "body_bytes_sent": "3297", "gzip_ratio": "-", "status": "200", "request": "0.477", "request_method": "GET", "http_referrer": "-", "http_user_agent": "curl/7.37.0", "http_x_forwarded_for": "-", "request_time": "0.477", "upstream_response_time": "0.477"} {"time": "2015-02-03T14:57:20+00:00", "remote_addr": "[IP]", "body_bytes_sent": "871", "gzip_ratio": "-", "status": "200", "request": "0.676", "request_method": "GET", "http_referrer": "-", "http_user_agent": "curl/7.37.0", "http_x_forwarded_for": "-", "request_time": "0.676", "upstream_response_time": "0.676"} 

Quelqu'un sait comment je peux get le gzip_ratio actuel?

Soit vous utilisez une version buggy de nginx, soit votre méthode d'essai a eu des défauts. Je viens de confirmer que $gzip_ratio dans une définition log_format fonctionne parfaitement dans nginx 1.9.1.

J'ai vu $gzip_ratio égal à égal - quand aucune compression n'a été effectuée. Dans tous les autres cas, il détenait une valeur numérique.