После года разработки представлена (http://nginx.org/?1.8) новая стабильная ветка высокопроизводительного HTTP-сервера nginx 1.8.0 (http://nginx.org/), которая вобрала в себя изменения, накопленные в рамках основной ветки 1.7.x. В дальнейшем все изменения в стабильной ветке 1.8 будут связаны с устранением серьёзных ошибок и уязвимостей. В скором времени будет сформирована основная ветка nginx 1.9, в рамках которой будет продолжено развитие новых возможностей. Для обычных пользователей, у которых нет задачи обеспечить совместимость со сторонними модулями, рекомендуется (http://nginx.com/blog/nginx-1-6-1-7-released) использовать основную ветку, на базе которой раз в три месяца формируются выпуски коммерческого продукта Nginx Plus.В соответствии с апрельским отчетом (http://news.netcraft.com/archives/2015/04/20/april-2015-web-...) компании Netcraft nginx используется на 14.24% (год назад 14.22%, два года назад 12.96%) всех активных сайтов, что соответствует второму месту по популярности в данной категории (доля Apache соответствует 50.91%, а Microsoft IIS - 10.95%). Доля nginx среди всех сайтов составляет 14.87% (год назад 15.25%), среди миллиона самых посещаемых сайтов в мире - 21.43% (год назад 17.82%). В настоящее время под управлением nginx работает около 126 млн сайтов (год назад 146 млн, два года назад - 96.1 млн). По данным (http://w3techs.com/technologies/overview/web_server/all) W3Techs 23.8% из миллиона самых посещаемых сайтов в мире используют nginx, в апреле прошлого года этот показатель составлял 20.4%. В России nginx используется (http://w3techs.com/technologies/breakdown/ws-nginx/top_level...) на 71.3% самых посещаемых сайтов (год назад - 68.6%).
Из улучшений (http://nginx.org/ru/CHANGES.ru-1.8), добавленных в процессе формирования основной ветки 1.7.x, можно отметить:
- Возможность выноса операций с файлами в отдельный пул потоков, что позволяет избавиться от блокирования рабочего процесса при выполнении операций чтения и отправки файлов. Число нитей в пуле потоков задаётся директивой thread_pool (http://nginx.org/ru/docs/ngx_core_module.html#thread_pool). Выборочная активация пула потоков для отдельных путей производится директивой "aio threads (http://nginx.org/ru/docs/http/ngx_http_core_module.html#aio)". Для работы пула потоков nginx должен быть собран с опцией "--with-threads";
- Экспериментальный API (http://hg.nginx.org/nginx/rev/42d9beeb22db) для создания фильтров тела запроса;
- Поддержка буферизации тела транзитных запросов, при включении которой тело запроса вначале полностью читается от клиента, а потом отправляется для дальнейшей обработки (без буферизации запрос начинает передаваться сразу). Для включения буферизации представлены директивы (http://nginx.org/ru/docs/http/ngx_http_proxy_module.html#pro...) proxy_request_buffering,
fastcgi_request_buffering, scgi_request_buffering и
uwsgi_request_buffering;
- Возможность проверки клиентских SSL-сертификатов в почтовом прокси и проверки в ngx_http_proxy_module проксированных серверных сертификатов, полученных от бэкендов;
- Объявлен устаревшим параметр "sendfile (http://nginx.org/ru/docs/http/ngx_http_core_module.html#send...)" директивы "aio". Отныне nginx автоматически использует AIO (http://nginx.org/ru/docs/http/ngx_http_core_module.html#aio) для предварительной загрузки данных для sendfile, если указаны директивы "aio" и "sendfile";
- В блок конфигурации upstream добавлена поддержка директивы "hash (http://nginx.org/en/docs/http/ngx_http_upstream_module.html#...)", предназначенной для организации балансировки нагрузки с привязкой клиента к серверу.
- Возможность (http://nginx.org/en/docs/http/ngx_http_log_module.html#acces...) перенаправления в syslog логов, настраиваемых через директивы "error_log" и "access_log".
- Добавлена директива ssl_password_file (http://nginx.org/ru/docs/http/ngx_http_ssl_module.html#ssl_p...) для определения файла с паролями от секретных ключей;
- Новые директивы управления таймаутами и числом повторных попыток при обращении к upstream:
- proxy_next_upstream_tries,
proxy_next_upstream_timeout,
- fastcgi_next_upstream_tries,
fastcgi_next_upstream_timeout,
- memcached_next_upstream_tries,
memcached_next_upstream_timeout,
- scgi_next_upstream_tries,
scgi_next_upstream_timeout,
- uwsgi_next_upstream_tries и
uwsgi_next_upstream_timeout.
- Новые директивы для принудительного включения byte ranges для прокэшированных и не кэшируемых ответов, назависимо от выставленных бэкендом заголовков: proxy_force_ranges, fastcgi_force_ranges,
scgi_force_ranges и uwsgi_force_ranges.
- Новые директивы для для ограничения скорости чтения данных (лимит задаётся в байтах в секунду): proxy_limit_rate (http://nginx.org/en/docs/http/ngx_http_proxy_module.html#pro...), fastcgi_limit_rate,
scgi_limit_rate и uwsgi_limit_rate;
- Новая директива autoindex_format (http://nginx.org/en/docs/http/ngx_http_autoindex_module.html...), позволяющая выбрать формат (html, xml, json и jsonp) вывода списка элементов директории;
- Новые директивы proxy_ssl_certificate,
proxy_ssl_certificate_key, proxy_ssl_password_file,
uwsgi_ssl_certificate, uwsgi_ssl_certificate_key и
uwsgi_ssl_password_file;
- В случае истечения таймаута proxy_cache_lock_timeout осуществляется отправка запроса к бэкенду без применения кэширования. Для управления временем принудительного снятия блокировки и повтора попыток кэширования добавлены директивы proxy_cache_lock_age, fastcgi_cache_lock_age, scgi_cache_lock_age и
uwsgi_cache_lock_age;
- Поддержка переменных "$upstream_cookie_{имя} (http://nginx.org/en/docs/http/ngx_http_upstream_module.html#...)" и "$ssl_client_fingerprint";
- Поддержка нового параметра always в директиве add_header;
- Поддержка переменных в директивах expires, proxy_cache, fastcgi_cache, scgi_cache и uwsgi_cache;
- Поддержка загрузки секретных ключей с аппаратных токенов при помощи движков OpenSSL;
- Налажено использование директив proxy_pass, fastcgi_pass, scgi_pass и uwsgi_pass внутри блоков "if" и "limit_except";
- В директивы "proxy_cache_path",
"fastcgi_cache_path", "scgi_cache_path" и "uwsgi_cache_path" добавлена поддержка параметра "use_temp_path", через который можно определить отдельную директорию для временных файлов;
- Добавлена переменная $upstream_header_time, в которой сохраняется время получения заголовков от upstream-сервера;
- В директивах limit_conn_zone и limit_req_zone можно использовать комбинации из нескольких переменных;
- Для SPDY-соединений и SSL-соединений с бэкендами реализована возможность использования директивы tcp_nodelay;
- При включенном кэширования бэкенду теперь передается содержимое HTTP-загловков "If-Modified-Since", "If-Range" и т.п, если заведомо известно, что ответ не будет прокэширован (например, при указании proxy_cache_min_uses);
- В ситуации переполнения диска, nginx снижает интенсивность вывода ошибок в лог до одной записи в секунду;
- Прекращена поддержка устаревшей директивы limit_zone;
- Использование директивы log_format ограничено только уровнем HTTP.
- Изменён метод экранирования символов в URI (используются шестнадцатеричные цифры в верхнем регистре;
- Поддержка сборки с библиотеками BoringSSL (http://www.opennet.me/opennews/art.shtml?num=40049) и LibreSSL (http://www.opennet.me/opennews/art.shtml?num=40184) (форки OpenSSL от Google и OpenBSD);
- Поддержка сборки с Си-библиотекой musl;
- Реализован механизм дефрагментации свободных блоков разделяемой памяти.
URL: http://mailman.nginx.org/pipermail/nginx-announce/2015/00015...
Новость: http://www.opennet.me/opennews/art.shtml?num=42082