2006 31.05.2006 | nginx-0.3.49.
Это последний релиз перед отпуском.
Несколько статей Алексея Ковырина о настройке nginx'а:
Статья
Михаила Сгибнева, в частности, о настройке nginx'а
в качестве IMAP/POP3 прокси сервера и настройке мониторинга с помощью Munin.
| |
19.04.2006 |
Майский бюллетень безопасности FreeBSD прошлого года и нынешний меня,
мягко говоря, несколько удивляют. Но если в прошлом году мифическое
раскрытие информации на процессорах с включённым HTT ещё хоть
как-то тянуло на проблемы с безопасностью, то нынешние
три регистра математического сопроцессора это уже
просто смешно.
И вся эта активность происходит на фоне того, что исправление действительно
серьёзной ошибки в
softupdates в security branch не попадает, потому что к
безопасности отношения не имеет. Или, например, проблема
в mmap(), для решения которой даже есть патч.
Патч, по-видимому, не вписывается в концепцию VM, но зато у меня прекрасно
работает уже второй год и машина не виснет.
А на мифические уязвимости в HTT и сопроцессоре я чихать хотел.
nginx-0.3.40.
| |
14.04.2006 | nginx-0.3.38.
Модуль ngx_http_dav_module. Несмотря на громкое название,
модуль на данный момент не обрабатывает ни одного WebDAV-метода,
а только два HTTP/1.1-метода PUT и DELETE.
| |
19.02.2006 |
На днях ставил на домашний компьютер FreeBSD 6.1-BETA1 c кучей софта,
среди прочего и Firefox 1.5, и обнаружил, что
исправленный plugin LiveHTTPHeaders
не доступен.
Поэтому я сделал патч.
Однако воспользоваться им не так просто, потому что нужно патчить
файл в jar-архиве.
Сначала нужно установить оригинальный
LiveHTTPHeaders
и убедиться, что закладка Headers в Page Info не работает.
После этого закрываем Firefox и переходим в его профиль:
~/.mozilla/firefox/XXXXXXXX.default
(вместо XXXXXXXX будет случайный набор символов).
В каталоге extensions должен быть каталог
{8f8fe09b-0bd3-4470-bc1b-8cad42b8203a}
Это такой идентификатор у plugin'а LiveHTTPHeaders.
Переходим туда и выполняем следующие операции:
unzip chrome/livehttpheaders.jar content/PageInfoOverlay.js -d chrome
patch < ~/patch.livehttpheaders.txt
cd chrome/
zip -m livehttpheaders.jar content/PageInfoOverlay.js
Теперь можно запускать Firefox.
| |
16.01.2006 | nginx-0.3.21.
Экспериментальный модуль ngx_http_perl_module.
Так как из-за разности в архитектурах nginx'а и Apache запускать mod_perl'овые
модули всё равно не получится, то я решил достаточно вольно обойтись
с mod_perl'овым API.
Например, метода $r->finfo не будет, поскольку он использует специфику
обработки запроса в Apache, а в nginx'е никакого выигрыша от него нет.
Вместо метода $r->send_fd(fh) будет $r->sendfile(filename),
использующий sendfile(), если это возможно. Пока методов
немного.
| |
13.01.2006 |
В презентации Майкла Рэдвина Hacking
Apache HTTP Server at Yahoo!
(здесь можно
посмотреть то же самое в PDF или, для совсем любителей, в PPT)
среди прочего описывается, как Yahoo! использует ядро FreeBSD в качестве
акселератора для не самой лёгкой комбинации Apache/mod_php.
Время общения Apache с клиентом сведено к минимуму ровно для того,
чтобы скопировать запрос и ответ:
сначала запрос клиента полностью принимается accept-фильтром httpready,
а затем весь ответ записывается в огромный, 224K, буфер сокета,
после чего сокет сразу же закрывается (-DNO_LINGCLOSE).
У этого метода есть и преимущества, и недостатки.
Один из недостатков суммарный объём данных, который
можно использовать под буфера сокетов (mbuf clusters) около 360M,
по крайней мере, во FreeBSD/i386 4.x с адресным пространством ядра в 1G.
Это означает, что при среднем размере ответа в 50K одна машина
может обслуживать примерно до 7,000 одновременных соединений.
Впрочем, во FreeBSD 6.0 и на amd64 этот объём должен быть больше.
Кроме того, адресное пространство ядра можно увеличить до 2G или даже до 3G.
Одно из преимуществ возможность быстро отдавать в большое
TCP window клиента, но, с другой стороны, без keep-alive это окно
приходится разгонять каждый раз заново.
| |
08.01.2006 |
Уже не в первый раз вижу непонимание того, как используется sendfile() в
неблокирующихся серверах. Люди считают, что весь файл передаётся за один
системный вызов, и это и является его главным преимуществом.
Это не так: передаётся только небольшая часть, которая
может поместиться в буфер сокета, и число вызовов для передачи большого
файла может быть достаточно большим. Зачем же тогда использовать sendfile()
в таких серверах ?
-
sendfile() всё же экономит системные вызовы, так как файл
не нужно предварительно считывать в адресное пространство сервера;
-
sendfile() уменьшает число копирований данных;
-
наконец, sendfile() позволяет использовать меньше физической памяти.
| |
07.01.2006 |
В конфигурации nginx'а используется механизм переменных, который обладает
несколькими свойствами.
Во-первых, значения переменных вычисляются только в момент их использования,
то есть, если переменная используется внутри одного location'а, то при
обработке запросов в других location'ах она не будет вычисляться.
Во-вторых, вычисленное значение переменной может кэшироваться в пределах
запроса.
В-третьих, во время исполнения запроса имена переменных не
используются каждой переменной присваивается численный индекс,
по которому в массиве находится обработчик переменной или закэшированное
значение.
И, наконец, механизм переменных позволяет расширять функциональность
nginx'а, не влияя на производительность остального кода, собственно,
модули ngx_http_geo_module,
ngx_http_map_module и
ngx_http_referer_module
только тем и занимаются, что вычисляют значения переменных.
С появлением модуля ngx_http_perl_module обработчики переменных можно
будет писать на перле. Примерно вот так можно проверить, что браузер
клиента MSIE 6.0 и выше:
http {
perl_require var.pm;
perl_set $msie var::msie6;
...
}
package var;
use nginx;
sub msie6 {
my $r = shift;
my $ua = $r->header_in("User-Agent");
return "" if $ua =~ /Opera/;
return "1" if $ua =~ / MSIE [6-9]\.\d+/;
return "";
}
1;
__END__
|
(C) Игорь Сысоев http://sysoev.ru |