Релиз http-сервера nginx 1.8.0

После года разработки представлена новая стабильная ветка высокопроизводительного HTTP-сервера nginx 1.8.0, которая вобрала в себя изменения, накопленные в рамках основной ветки 1.7.x. В дальнейшем все изменения в стабильной ветке 1.8 будут связаны с устранением серьёзных ошибок и уязвимостей. В скором времени будет сформирована основная ветка nginx 1.9, в рамках которой будет продолжено развитие новых возможностей. Для обычных пользователей, у которых нет задачи обеспечить совместимость со сторонними модулями, рекомендуется использовать основную ветку, на базе которой раз в три месяца формируются выпуски коммерческого продукта Nginx Plus. В соответствии с апрельским отчетом компании 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 млн). По данным W3Techs 23.8% из миллиона самых посещаемых сайтов в мире используют nginx, в апреле прошлого года этот показатель составлял 20.4%. В России nginx используется на 71.3% самых посещаемых сайтов (год назад — 68.6%).

Из улучшений, добавленных в процессе формирования основной ветки 1.7.x, можно отметить:

Возможность выноса операций с файлами в отдельный пул потоков, что позволяет избавиться от блокирования рабочего процесса при выполнении операций чтения и отправки файлов. Число нитей в пуле потоков задаётся директивой thread_pool. Выборочная активация пула потоков для отдельных путей производится директивой «aio threads». Для работы пула потоков nginx должен быть собран с опцией »--with-threads»; Экспериментальный API для создания фильтров тела запроса; Поддержка буферизации тела транзитных запросов, при включении которой тело запроса вначале полностью читается от клиента, а потом отправляется для дальнейшей обработки (без буферизации запрос начинает передаваться сразу). Для включения буферизации представлены директивы proxy_request_buffering, fastcgi_request_buffering, scgi_request_buffering и uwsgi_request_buffering; Объявлен устаревшим параметр «sendfile» директивы «aio». Отныне nginx автоматически использует AIO для предварительной загрузки данных для sendfile, если указаны директивы «aio» и «sendfile»; В почтовом прокси добавлена возможность проверки клиентских SSL-сертификатов; В блок конфигурации upstream добавлена поддержка директивы «hash», предназначенной для организации балансировки нагрузки с привязкой клиента к серверу. Возможность перенаправления в syslog логов, настраиваемых через директивы «error_log» и «access_log». Поддержка переменных »$upstream_cookie_{имя}» и »$ssl_client_fingerprint»; Добавлена директива ssl_password_file для определения файла с паролями от секретных ключей; Поддержка нового параметра always в директиве add_header; Новые директивы управления таймаутами и числом повторных попыток при обращении к 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, fastcgi_limit_rate, scgi_limit_rate и uwsgi_limit_rate; Поддержка переменных в директивах expires, proxy_cache, fastcgi_cache, scgi_cache и uwsgi_cache; Поддержка загрузки секретных ключей с аппаратных токенов при помощи движков OpenSSL; Новая директива autoindex_format, позволяющая выбрать формат (html, xml, json и jsonp) вывода списка элементов директории; Налажено использование директив 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-сервера; В ситуации переполнения диска, nginx снижает интенсивность вывода ошибок в лог до одной записи в секунду; Прекращена поддержка устаревшей директивы limit_zone; В директивах limit_conn_zone и limit_req_zone можно использовать комбинации из нескольких переменных; Новые директивы proxy_ssl_certificate, proxy_ssl_certificate_key, proxy_ssl_password_file, uwsgi_ssl_certificate, uwsgi_ssl_certificate_key и uwsgi_ssl_password_file; Для SPDY-соединений и SSL-соединений с бэкендами реализована возможность использования директивы tcp_nodelay; При включенном кэширования бэкенду теперь передается содержимое HTTP-загловков «If-Modified-Since», «If-Range» и т.п, если заведомо известно, что ответ не будет прокэширован (например, при указании proxy_cache_min_uses); В случае истечения таймаута proxy_cache_lock_timeout осуществляется отправка запроса к бэкенду без применения кэширования. Для управления временем принудительного снятия блокировки и повтора попыток кэширования добавлены директивы proxy_cache_lock_age, fastcgi_cache_lock_age, scgi_cache_lock_age и uwsgi_cache_lock_age; Использование директивы log_format ограничено только уровнем HTTP. Изменён метод экранирования символов в URI (используются шестнадцатеричные цифры в верхнем регистре; Поддержка сборки с библиотеками BoringSSL и LibreSSL (форки OpenSSL от Google и OpenBSD); Поддержка сборки с Си-библиотекой musl; Реализован механизм дефрагментации свободных блоков разделяемой памяти.

© OpenNet