У меня при попытке поместить конструкцию if () {limit_rate ...} на
уровне server{} - nginx -t ругается, что директива limit_rate не
разрешена в данном месте. При переносе внутрь location работает
нормально. Это так и должно быть? В мануале написано, что limit_rate
разрешено на всех уровнях.
Исправлю в документации. Реально limit_rate можно задавать на уровнях
http, server, location, if в location
Можно было бы сделать "if в server", но это лишь будет вводить
в заблуждение, поскольку эта конфигурация пропадёт при попадании в
любой location. Внутри "if в server" разрешены только директивы
ngx_http_rewrite_module, они могут выполнятся во время запроса,
а значения всех остальных директив - это статические данные, которые
создаются во время конфгурации, и при выборе server или location
просто копируется указатель на эти статические данные.
Кстати, в мануале также написано, что limit_rate задается в килобайтах
в секунду, а в реальности насколько я понимаю все же в байтах в
секунду.