Назад | Перейти на главную страницу

Берут ли файлы конфигурации nginx килобайты или кибибайты

Документация nginx "Единицы измерения файла конфигурации" на http://nginx.org/en/docs/syntax.html говорит:

Размеры могут быть указаны в байтах, килобайтах (суффиксы k и K) или мегабайтах (суффиксы m и M).

Это неясно, потому что килобайт официально определяется как 1000 байтов, а мегабайт официально определяется как 1000000 байтов, но часто он используется для обозначения 1024 байтов и 1024 * 1024 байтов соответственно. Какой именно килобайт размера используется в файлах конфигурации nginx? Когда в документации указано, что по умолчанию 1m в том, что 1000000 или 1048576?

Глядя на источник на http://hg.nginx.org/nginx/file/15056a29841a/src/core/ngx_parse.c (это версия ngx_parse.c в 1.5.6, но функция выглядит так же в Версия 0.3.53, и вы можете проверить текущую версию Вот), оказывается, что k или K представляют 1024 байта, то есть кибибайты (KiB), а m или M представляют мебибайты (MiB), то есть 1024 KiB.

ssize_t
ngx_parse_size(ngx_str_t *line)
{
    u_char     unit;
    size_t     len;
    ssize_t    size;
    ngx_int_t  scale;

    len = line->len;
    unit = line->data[len - 1];

    switch (unit) {
    case 'K':
    case 'k':
        len--;
        scale = 1024;
        break;

    case 'M':
    case 'm':
        len--;
        scale = 1024 * 1024;
        break;

    default:
        scale = 1;
    }

    size = ngx_atosz(line->data, len);
    if (size == NGX_ERROR) {
        return NGX_ERROR;
    }

    size *= scale;

    return size;
}