После года разработки и 16 экспериментальных выпусков в тестовой ветке 1.3.x представлена новая стабильная версия высокопроизводительного HTTP-сервера nginx 1.4.0. В дальнейшем все изменения в новой стабильной ветке будут связаны с устранением ошибок и внесением незначительных улучшений, не нарушающих API. Все существенные изменения будут развиваться в рамках новой экспериментальной ветки 1.5.x.
В соответствии с апрельским отчетом компании Netcraft nginx используется на 12.91% всех активных сайтов, что соответствует второму месту по популярности в данной категории (доля Apache соответствует 51.01%, а Microsoft IIS - 12.13%). Доля nginx среди всех сайтов составляет 14.81%, среди миллиона самых посещаемых сайтов в мире - 12.96%, среди 10 тысяч наиболее крупных ресурсов - 30%, среди сайтов, работающих на платформе Amazon AWS, - 44%. В настоящее время под управлением nginx работает около 96.1 млн сайтов, что на 26.3 млн больше чем год назад. По данным W3Techs 16.1% из миллиона самых посещаемых сайтов в мире используют nginx, в апреле прошлого года этот показатель составлял 11%. В России nginx используется на 66.3% самых посещаемых сайтов (год назад - 58.2%).
Из улучшений, добавленных в процессе формирования экспериментальной ветки 1.3.x, можно отметить:
- Интеграция модуля ngx_http_spdy_module с реализацией протокола SPDY, который продвигается для включения в состав будущего стандарта HTTP/2.0. SPDY был создан специально для минимизации задержек при соединении и обмене данными между клиентом и сервером. По данным Google ускорение загрузки страниц при использовании SPDY составляет от 15% до 50%. SPDY добавляет сеансовый уровень поверх SSL, что даёт возможность обеспечить передачу нескольких одновременных потоков в рамках одного TCP-соединения. При использовании HTTP запросы в рамках одного потока обслуживаются последовательно, задействование SPDY даёт возможность мультиплексировать запросы ресурсов, обрабатывать их параллельно и отправлять запросы с учетом динамически рассчитываемых приоритетов, увеличивая текущую пропускную способность. Использование SSL одновременно позволяет решить проблему с прохождением запросов через прокси серверы и позволяет организовать доставку данных по инициативе сервера, без специального запроса клиента (технология Server push). Дополнительное ускорение достигается за счёт сжатия HTTP-заголовков запроса и ответа, что уменьшает размер передаваемых данных и заметно ускоряет загрузку страниц, порождающих большое число мелких запросов (CSS, JavaScript файлы, картинки), особенно при использовании медленных каналов связи.
- Поддержка работы в роли прокси для соединений WebSocket. Поддержка WebSocket-соединений в модулях ngx_http_uwsgi_module и ngx_http_scgi_module. Протокол WebSocket разработан для решения проблемы с организацией двустороннего надёжного обмена данными между web-приложением и сервером. По своей сути WebSockets является своеобразным аналогом TCP для Web и позволяет в произвольном порядке инициировать отправку данных от сервера к web-приложению, а не только от web-приложения к серверу. Сам протокол не использует "сырые" TCP-соединения или множественные HTTP-запросы, вместо этого постоянное соединение поддерживается в рамках единого с HTTP канала передачи данных, по которому не передаётся лишних HTTP-заголовков. Установив WebSocket-соединение между сервером и клиентом, разработчик может отправить данные из web-браузера при помощи метода send() и получить отправленные со стороны сервера данные через установку специального обработчика событий;
- Добавлен модуль ngx_http_gunzip_module с реализацией фильтра, позволяющего распаковывать на стороне nginx ответы серверов, сжатые методом gzip, если клиент не поддерживает gzip-сжатие. Таким образом появляется возможность хранить все прокэшированные ответы в сжатом виде, что достаточно сильно экономит дисковое пространство;
- В модуле ngx_http_ssl_module появилась поддержка механизма OCSP stapling, позволяющего выполнять проверку статуса TLS/SSL-сертификатов на OCSP-серверах и оперативно реагировать на факты отзыва сертификатов;
- Добавлены директивы: limit_req_status, limit_conn_status, image_filter_interlace, real_ip_recursive, geoip_proxy и geoip_proxy_recursive;
- Добавлена поддержка переменных в директивах proxy_bind, fastcgi_bind, memcached_bind, scgi_bind и uwsgi_bind;
- В почтовом прокси-сервере добавлена поддержка IPv6-бэкендов;
- Переменные $status, $pipe, $request_length, $time_iso8601, $request_time,$bytes_sent, $connection, $connection_requests, $msec и $time_local теперь можно использовать не только в директиве log_format;
- В модуль ngx_http_geoip_module добавлена поддержка IPv6. Директива geo теперь поддерживает IPv6 адреса в формате CIDR;
- При использовании директивы include с маской на Unix-системах включаемые файлы теперь сортируются в алфавитном порядке;
- Директивы proxy_pass, fastcgi_pass, scgi_pass, uwsgi_pass и директива server в блоке upstream теперь поддерживают IPv6-адреса. В директиве resolver теперь можно указывать порт и задавать IPv6-адреса DNS-серверов;
- Поддержка автоматической настройки директивы worker_processes в зависимости от числа процессорных ядер в системе (параметр auto);
- Поддержка компилятора Clang;
- Добавлена поддержка директивы least_conn в блоке upstream;
- При использовании директивы ip_hash теперь можно задавать веса серверов;