gzip_ratio não imprime em logs nginx

4

Estou configurando o formato nginx access_log para saída em JSON para usar com outras ferramentas.

Os dados que eu quero incluem informações sobre a compactação. Eu tenho gzip, mas a única coisa que estou recebendo para o gzip_ratio é - .

Para confirmar, o var incorporado é $gzip_ratio .

link

Aqui está a definição do meu 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"}';

Aqui estão as configurações do gzip em 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;

E aqui está a saída no 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"
}

Então, parece que as coisas não estão sendo compactadas. No entanto, executei cURL para testar a compactação e aqui estão os resultados:

[~]$ 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

Então, a partir de realmente medir o tamanho da resposta, parece que está sendo compactado. No entanto, os logs ainda estão faltando o gzip_ratio . O body_bytes_sent no log de cada solicitação corresponde aos bytes informados por cURL (pequena variação com resposta compactada).

{"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"}

Alguém sabe como posso obter o gzip_ratio real?

    
por gotmikhail 03.02.2015 / 16:01

1 resposta

1

Você está usando uma versão com bugs do nginx ou seu método de teste tinha algumas falhas. Acabei de confirmar que $gzip_ratio em uma definição log_format funciona perfeitamente no nginx 1.9.1.

Eu vi $gzip_ratio apenas igual a - quando nenhuma compactação foi realizada. Em todos os outros casos, ele continha um valor numérico.

    
por 08.06.2015 / 13:52