nginx
Angie
Спросили как я отношусь к появлению Angie — отечественного форка известнейшего
Это минимальный набор инструментов, чтобы сделать любой сайт. Времена менялись, Перл сменился ПХП, тот уступил Пайтону, МайЭсКуЭль заменила МарияДБ, но аббревиатура держалась.
Всё сломалось, когда пришёл nginx и вытеснил Апач.
Мне было жаль LAMP, — аббревиатуру, которую я знал с начала веба, но теперь есть шанс, что она починится по крайней мере на территории нашей страны.
А если серьёзно, никаких заметных телодвижений ребята пока не сделали, поэтому не вижу повода о них разговаривать. В стране постоянно появляются форки известных западных продуктов (в реестре отечественного ПО они достаточно заметны) и с тем же постоянством исчезают.
Апач vs. Энжиникс
Меня
Я поставил и настроил ngnix для отдачи статического контента. Это снизило нагрузку в 2 раза…
Речь идёт о сайте president2012.ru. Версия Апача —
«Парсер» студии Лебедева и nginx
Смог запустить Парсер на nginx. Поставил
server {
listen 80;
server_name parser.internal;
set $root /var/www/parser;
root $root;
location ~ \.(p|cgi)$ {
include fastcgi_params;
fastcgi_pass unix:/var/www/cgiwrap-dispatch.sock;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_script_name;
fastcgi_param PATH_TRANSLATED $root$fastcgi_script_name;
fastcgi_param SCRIPT_FILENAME $root$fastcgi_script_name;
}
}SimpleCGI после запуска создаёт файловый сокет
Причём, что интересно, с SimpleCGI спокойно работает и Парсер из пакета, на который я жаловался, что он падает
Добавлено позже: если нужно указать путь до auto.p, то можно добавить «fastcgi_param CGI_PARSER_CONFIG путь/до/auto.p».
«Парсер» студии Лебедева и thttpd
Сегодня потратил часть дня, чтобы выяснить, что Парсер не заработает с thttpd.
Вообще, мне очень нравится
У меня Ubuntu 10.04, поэтому я всё поставил из пакетов, Парсер в том числе, пакет неофициальный, я его нашёл в разделе прислали пользователи.
После того как я всё настроил, ничего не заработало. Отладка через strace быстро показала, что Парсер падает. Я его перекомпилировал. Если будете перекомпилировать, вот мой рецепт.
Я поставил следующие пакеты (легко допускаю, что
В каталог
CPPFLAGS='-I/opt/pcre-8.12 -I/opt/pcre/include/' \
./configure --prefix=/opt/parser3/ --with-shared-gc --with-static-pcre=/opt/pcre
make
sudo make installПосле того как я стал пользоваться собранным мною Парсером,
Тут я догадался (поскольку в консоли не видел
Я создал небольшой
if(cgi) {
// few absolute obligatory
const char* path_info=getenv("PATH_INFO");
if(!path_info)
SAPI::die("CGI: illegal call (missing PATH_INFO)");
const char* script_name=getenv("SCRIPT_NAME");
if(!script_name)
SAPI::die("CGI: illegal call (missing SCRIPT_NAME)");
// … ещё много кода …
}При помощи CGI, написанного на bash, я выгрузил все переменные окружения, которые предоставляет thttpd (у меня версия 2.25b), оказалось, что двух последних переменных в дампе нет. Причём в интернете эта проблема уже поднималась (правда без связи с Парсером) и была успешна разрешена авторами thttpd. Наверное в последней версии
Добавлено: я
Добавлено ещё позже: так, по коду выходит следующее: если
При этом
Чтобы понимать:
http://example.org/cgi-bin/test.cgi — формируется SCRIPT_NAME, но не PATH_INFO и PATH_TRANSLATED
http://example.org/cgi-bin/test.cgi/ — формируется PATH_INFO и PATH_TRANSLATED, но не SCRIPT_NAMEИ ещё позднее: попробовал
WebDAV
Пытаюсь настроить WebDAV, чтобы им можно было пользоваться на nginx. Пока не получилось. Модуль WebDAV из nginx не умеет обрабатывать OPTIONS и PROPFIND,
Для этого я взял davserver — небольшой сервер, написанный на Пайтоне. У него два достоинства: он на Пайтоне и он есть
Выяснилось, что это плохая идея.
try:
os.system("mkdir '%s'" % path)
self._log('mkcol: Created new collection %s' % path)
return 201Кажется, они даже не заморачиваются экранированием спецсимволов в path, правда я бегло смотрел.
Пока не решил возьму ли
Nginx и WSGI
Тем временем в версии 0.8.40 появился модуль ngx_http_uwsgi_module от Roberto De Ioris.
JavaScript V8 и nginx
Игорь Сысоев написал интересную статью «Почему Google V8 пока не подходит для встраивания в сервера», краткая выжимка:
Поскольку V8 разрабатывается в первую очередь для Chrome, то это наложило на него существенный отпечаток и, перефразируя высказывание Генри Форда о цвете машины, можно сказать, что V8 будет хорошо работать в любой программе, при условии, что эта программа называется Chrome. (…) Подытоживая вышеописанное, можно сказать, что на данный момент (версия 2.0.6.4, февраль 2010 года) V8 не подходит для серьёзного встраивания в сервера.
nginx, IE и gzip
Моё исследование (проведённое для книги, которую мы пишем) по проблемам реализации сжатия в браузерах принесло счастье пользователям nginx:
0.8.11 Изменение: теперь директива «gzip_disable msie6» не запрещает сжатие для MSIE 6.0 SV1.
Списался с Игорем Сысоевым и с версии 0.8.11 nginx не отключает
HTML5 и IE
Оказывается, есть немного кривой, но способ заставить IE показывать незнакомые ему теги в глобальном namespace! В частности, это поможет уже сейчас использовать семантические теги из HTML5.
Решение основано на интересном хаке:
Btw, if you want CSS rules to apply to unknown elements in IE, you just have to do document.createElement(elementName). This somehow lets the CSS engine know that elements with that name exist.
Есть другое решение, но оно требует использования namespace. В IE есть всеми забытая технология custom tags. Когда появился черновик HTML5 я пытался использовать её, чтобы внедрить в документ новые теги:
<html xmlns:html5="http://www.w3.org/html/wg/html5/">
<head>
<style type="text/css">
html5\:footer {
display: block;
border: 1px solid black;
padding: 10px;
}
</style>
</head>
<body>
<html5:footer>This is footer!</html5:footer>
</body>
</html>Не совсем то, что нужно, если не использовать сторонние средства. Если использовать, то для альтернативного браузера можно оставлять как есть, а для правильных — вычищать ненужное пространство заменой на уровне
Далее дело техники. Например, если взять Nginx, в нём есть модули rewrite, browser и sub. Первый умеет выполнять условия, второй — определять браузеры, третий — заменять одну строку на другую. Получается
modern_browser msie 1.0;
if ($ancient_browser) {
sub_filter 'html5:' ''
}Надо сразу оговориться, что это не готовое решение, а намётки: кроме «html5:» надо так же вычистить «html5\:».
Кривой веб-клиент от Motorola
Заинтересовало изменение в новой (0.7.0) версии nginx (это довольно хороший
Вопрос: А в каком случае клиент может послать несколько заголовков Host?
Ответ: В случае кривого клиента. Такие, к сожалению, есть — цитата
из баг-репорта: Так вот,
Java-машина на ряде аппаратов Motorola (например, K1) имеет свойство указывать в заголовкеHTTP-запроса два поля Host. Причём, один из этих заголовков корректный, а второй содержит значение localhost.
Тест nginx
Тестировал сегодня nginx. Отключил все ненужные модули (кстати, если будете компилировать
Так или иначе, 0W лидирует по скорости и обладает более пригодным для моих задач возможностями. Но и nginx очень хорош, думаю, если будет развиваться, может стать достойным конкурентом остальным решениям.
Тестирование веб-серверов
Прислали ссылку на тестирование различных
Итак. Лучше всех справился