Пятница, 28 Ноябрь 2008
nginx: другой аллокатор
Работая, пришлось подменить аллокатор для nginx. Результат понравился мне (измерения все делались top’ом).
Работая, пришлось подменить аллокатор для nginx. Результат понравился мне (измерения все делались top’ом).
Давно я не писал про потроха nginx, пора исправляться.
Сегодня речь пойдет о создании своих блоков с директивами в конфиге.
Сидел я себе на работе, наслаждаясь нормальными стаканчиками, и захотелось мне иметь возможность написать в nginx.conf такую вот конструкцию:
location /response {
response "<root><pid>$pid</pid></root>";
response_type "text/xml";
}
Подумал я немного, поспрашивал разных умных, да и не очень, людей и написал, в итоге модуль. Авось кому еще пригодиться.
Патч добавляет опцию --with-http_response_module
в ./configure, и две директивы в конфиг response
и response_type
, если response_content_type не установлен, берется значение из default_type.
Для наложения можно использовать обычный patch.
Пришла в голову идея посчитать а сколько каждое словов встречается в nginx-0.7.19. Посчитал. Много думаю. 11392 открытых фигурных скобок, против 10427 закрытых и 384 закрытых с точкой запятой. 3161 открытый комментарий, против 3151 закрытого… Мнда.
Да, код собирается и работает. Или активно делает вид что работает и собирается на куче серверов в интернете.
Что бы закрыть тему про смешной релиз предлагаю прочитать сообщение Игоря Сысоева.
Вчера вышел nginx-0.7.19. Изменения просто потрясают:
Исправление: обновление номера версии.
Кто не верит, смотреть может у Сысоева
После любимых кодов у меня уже несколько человек спросили как я это сделал. Показываю настройку location для nginx:
Как оказалось, nginx, не умеет подставлять через переменные текущий timestamp. Обучающий patch
Во время написания модулей приходится постоянно пользоваться аллокатором nginx и ему очень не хватает realloc.
В процессе написания своих модулей под nginx часто приходится искать подстроку в строке. К сожалению обычный strstr не подходит из-за особеностей строк.