Выпуск nginx 1.17.1 и njs 0.3.3

Доступен выпуск основной ветки nginx 1.17.1, в рамках которой продолжается развитие новых возможностей (в параллельно поддерживаемой стабильной ветке 1.16 вносятся только изменения, связанные с устранением серьёзных ошибок и уязвимостей.

Основные изменения:

  • Добавлена директива limit_req_dry_run, которая активирует режим пробного запуска, в котором не применяются ограничения на интенсивность обработки запросов (без rate limit), но продолжается учёт выходящего за лимиты числа запросов в разделяемой памяти;
  • При использовании в блоке настроек «upstream» директивы «hash» для организации балансировки нагрузки с привязкой клиента к серверу, в случае указания пустого значения ключа теперь активируется режим равномерной балансировки (round-robin);
  • Устранён крах рабочего процесса при использовании кэша в сочетании с директивой «image_filter» и перенаправлением обработчика кода ошибки 415 с использованием директивы «error_page»;
  • Устранён крах рабочего процесса, проявляющийся при использовании встроенного интерпретатора Perl.

Дополнительно можно отметить выпуск njs 0.3.3, интерпретатора языка JavaScript для веб-сервера nginx. Интерпретатор njs реализует стандарты ECMAScript и позволяет расширять возможности nginx по обработке запросов с помощью скриптов в конфигурации. Скрипты могут использоваться в файле конфигурации для определения расширенной логики обработки запросов, формирования конфигурации, динамической генерации ответа, модификации запроса/ответа или быстрого создания заглушек с решением проблем в web-приложениях.

В новом выпуске njs устранены проблемы, выявленные в ходе fuzzing-тестирования. Реализована глобальная переменная «process» c параметрами и переменными окружения текущего процесса (process.pid, process.env.HOME и т.п.). Обеспечена возможность записи во все встроенные свойства и метод. Добавлена реализация Array.prototype.fill (). Реализована поддержка предложенного в ECMAScript 5 синтаксиса getter и setter для привязки свойства объекта к функции, например:

     var o = {a:2};     Object.defineProperty(o, ‘b’, {get:function(){return 2*this.a}});  

© OpenNet