NGINX JavaScript, также известный как NJS, представляет собой динамический модуль для NGINX, который позволяет расширять встроенные функции с помощью знакомого синтаксиса JavaScript. Язык NJS — это подмножество JavaScript, совместимое с ES5 (ECMAScript 5.1 Strict Variant) с некоторыми ES6 (ECMAScript 6) и более новыми расширениями. Более подробную информацию см. в разделе «Совместимость».
Как это работает
Загрузка и установка
Предоставление репозитория пакетов NGINX
Установка модулей JavaScript NGINX
Установленные файлы и места
Начало работы с NGINX JavaScript
Убедитесь, что NGINX работает
Включение модулей JavaScript NGINX
Основы написания файлов сценариев .js
Ссылка на пользовательские объекты, методы и свойства
Пример: Привет, мир!
Интерфейс командной строки NJS (CLI)
Сборка из исходников
Установка зависимостей
Клонирование репозитория NGINX JavaScript на GitHub
Создание автономной утилиты интерфейса командной строки (необязательно)
Клонирование репозитория NGINX GitHub
Создание NGINX JavaScript как модуля NGINX
Технические характеристики NGINX JavaScript
Поддерживаемые дистрибутивы
Поддерживаемые среды развертывания
Поддерживаемые версии NGINX
Рекомендации по выбору размера
Задавайте вопросы, сообщайте о проблемах и вносите свой вклад
Журнал изменений
Лицензия
NGINX JavaScript предоставляется в виде двух динамических модулей для NGINX (ngx_http_js_module и ngx_stream_js_module) и может быть добавлен в любую поддерживаемую установку NGINX Open Source или NGINX Plus без перекомпиляции.
Модуль NJS позволяет администраторам NGINX:
Добавьте комплексный контроль доступа и проверки безопасности до того, как запросы достигнут вышестоящих серверов.
Управление заголовками ответов
Создавайте гибкие асинхронные обработчики контента, фильтры и многое другое!
См. примеры и различные наши проекты, разработанные совместно с NJS:
Расширяет функциональность NGINX Plus для прямого взаимодействия с OIDC-совместимыми поставщиками удостоверений, аутентификации пользователей и авторизации контента, доставляемого NGINX Plus.
Эталонная реализация NGINX Plus в качестве поставщика услуг аутентификации SAML.
Предоставляет конечную точку метрик Prometheus непосредственно из NGINX Plus.
Кончик
NJS также можно использовать с сервером приложений NGINX Unit. Узнайте больше об API управления NGINX Unit и о том, как определять вызовы функций с помощью NJS.
Выполните следующие действия, чтобы загрузить и установить предварительно скомпилированные двоичные файлы NGINX и NGINX JavaScript для Linux. Вы также можете собрать модуль локально из исходного кода.
Следуйте этому руководству, чтобы добавить официальный репозиторий пакетов NGINX в вашу систему и установить NGINX Open Source. Если у вас уже установлен NGINX Open Source или NGINX Plus, пропустите часть установки NGINX на последнем шаге.
После подготовки репозитория вы можете установить NJS, выполнив следующую команду:
sudo apt установить nginx-module-njs
sudo yum установить nginx-module-njs
sudo apk добавить nginx-module-njs@nginx
sudo zypper установить nginx-module-njs
Кончик
Репозиторий пакетов включает альтернативный модуль, который включает символы отладки. Хотя этот модуль не рекомендуется для производственных сред, он может быть полезен при разработке конфигураций на основе NJS. Чтобы загрузить и установить отладочную версию модуля, замените имя модуля в предыдущей команде на nginx-module-njs-dbg
.
Скрипты установки пакета устанавливают два модуля, поддерживающих контексты http
и stream
NGINX.
ngx_http_js_module
Этот модуль NJS позволяет манипулировать данными, передаваемыми по HTTP.
ngx_stream_js_module
Этот модуль NJS позволяет манипулировать данными, передаваемыми через потоковые протоколы, такие как TCP и UDP.
По умолчанию оба модуля устанавливаются в каталог /etc/nginx/modules
.
Использование NJS включает в себя включение модуля, добавление файлов JavaScript с определенными функциями и вызов экспортированных функций в файлах конфигурации NGINX.
NGINX JavaScript — это модуль для NGINX Open Source или NGINX Plus. Если вы еще этого не сделали, выполните следующие действия, чтобы установить NGINX Open Source или NGINX Plus. После установки убедитесь, что экземпляр NGINX запущен и может отвечать на HTTP-запросы.
Введите следующую команду, чтобы запустить NGINX:
судо nginx
локон -я 127.0.0.1
Вы должны увидеть следующий ответ:
HTTP/1.1 200 ОК Сервер: nginx/1.25.5
После установки любой (или оба) модуля NJS должен быть включен в файл конфигурации NGINX. В большинстве систем файл конфигурации NGINX по умолчанию находится в /etc/nginx/nginx.conf
.
судо vi /etc/nginx/nginx.conf
Используйте директиву load_module в контексте верхнего уровня («основном»), чтобы включить один (или оба) модуля(ов).
модули load_module/ngx_http_js_module.so; модули load_module/ngx_stream_js_module.so;
Файлы сценариев NJS обычно имеют расширение .js и помещаются в каталог /etc/nginx/njs/
. Обычно они состоят из функций, которые затем экспортируются, что делает их доступными в файлах конфигурации NGINX.
NJS предоставляет коллекцию объектов со связанными методами и свойствами, которые не являются частью определений ECMAScript. Ознакомьтесь с полным описанием этих объектов и узнайте, как их можно использовать для дальнейшего расширения и настройки NGINX.
Вот базовый пример «Hello World».
Функция hello
в этом файле возвращает код ответа о состоянии HTTP 200 OK вместе со строкой «Hello World!», за которой следует перевод строки. Затем функция экспортируется для использования в файле конфигурации NGINX.
Добавьте этот файл в каталог /etc/nginx/njs
:
функция привет(r) { r.return(200, "Hello world!n");}export default {hello}
Мы модифицируем нашу конфигурацию NGINX ( /etc/nginx/nginx.conf
), чтобы импортировать файл JavaScript и выполнять функцию при определенных обстоятельствах.
# Загрузите модуль ngx_http_js_moduleload_module elements/ngx_http_js_module.so;events {}http { # Установите путь к нашим файлам JavaScript njs js_path "/etc/nginx/njs/"; # Импортируем наш файл JavaScript в переменную «main». js_import main из http/hello.js; server {listen 80;location / { # Выполнить функцию «hello», определенную в нашем файле JavaScript, для всех HTTP-запросов # и ответить содержимым нашей функции. js_content main.hello; } } }
Полный список директив njs см. на страницах документации модулей ngx_http_js_module и ngx_stream_js_module.
Кончик
Более подробную версию этого и других примеров можно найти в официальном репозитории njs-examples.
NGINX JavaScript устанавливается с помощью утилиты интерфейса командной строки. Интерфейс можно открыть как интерактивную оболочку или использовать для обработки синтаксиса JavaScript из предопределенных файлов или стандартного ввода. Поскольку утилита работает независимо, объекты, специфичные для NGINX, такие как HTTP и Stream, недоступны во время ее выполнения.
$ njs>> globalThisglobal { njs: njs {версия: '0.8.4' }, глобальный: [Круговой], процесс: процесс {argv: ['/usr/bin/njs'],env: { ПУТЬ: '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin: /bin', HOSTNAME: 'f777c149d4f8', TERM: 'xterm', NGINX_VERSION: '1.25.5', NJS_VERSION: '0.8.4', PKG_RELEASE: '1~buster', HOME: '/root'} }, консоль: {журнал: [Функция: встроенная], дамп: [Функция: встроенная], время: [Функция: встроенная], timeEnd: [Функция: встроенная] }, печать: [Функция: встроенная]}>>
$ эхо "2**3" | нджс -q 8
Следующие шаги можно использовать для создания NGINX JavaScript в качестве динамического модуля для интеграции в NGINX или автономного двоичного файла для использования в качестве утилиты интерфейса командной строки.
Важный
Чтобы создать модуль для использования с NGINX, вам также потребуется клонировать, настроить и собрать NGINX, выполнив действия, описанные в этом документе.
Большинству дистрибутивов Linux потребуется установка нескольких зависимостей для сборки NGINX и NGINX JavaScript. Следующие инструкции относятся только к менеджеру пакетов apt
, широко доступному в большинстве дистрибутивов Ubuntu/Debian и их производных.
sudo apt установить gcc make
sudo apt install libpcre3-dev zlib1g-dev libssl-dev libxml2-dev libxslt-dev
Для сборки с помощью QuickJS вам также потребуется собрать библиотеку QuickJS:
git клон https://github.com/bellard/quickjscd fastjs CFLAGS='-fPIC' make libquickjs.a
Предупреждение
Это минимальный набор библиотек зависимостей, необходимый для сборки NGINX и NJS. Другие зависимости могут потребоваться, если вы решите собрать NGINX с дополнительными модулями. Отслеживайте выходные данные команды configure
, обсуждаемой в следующих разделах, чтобы узнать, какие модули могут отсутствовать.
Используя предпочитаемый вами метод, клонируйте репозиторий JavaScript NGINX в каталог разработки. Дополнительные сведения см. в разделе Клонирование репозитория GitHub.
https://github.com/nginx/njs.git
Следующие шаги не являются обязательными и необходимы только в том случае, если вы решите собрать NJS как отдельную утилиту.
Чтобы использовать интерактивную оболочку NJS, вам необходимо установить библиотеку libedit-dev.
sudo apt установить libedit-dev
Запустите следующие команды из корневого каталога вашего клонированного репозитория:
./настроить
Сборка JavaScript NGINX:
делать
Теперь утилита должна быть доступна по адресу <NJS_SRC_ROOT_DIR>/build/njs
. Информацию об использовании см. в разделе Интерфейс командной строки (CLI) NJS.
Клонируйте репозиторий исходного кода NGINX в каталоге за пределами ранее клонированного репозитория исходного кода NJS.
https://github.com/nginx/nginx.git
Чтобы собрать NGINX JavaScript как динамический модуль, выполните следующие команды из корневого каталога репозитория исходного кода NGINX:
auto/configure --add-dynamic-module=<NJS_SRC_ROOT_DIR>/nginx
Для сборки с поддержкой QuickJS укажите путь к включению и библиотеке, используя параметры --with-cc-opt=
и --with-ld-opt=
:
auto/configure --add-dynamic-module=<NJS_SRC_ROOT_DIR>/nginx --with-cc-opt="-I<QUICKJS_SRC_ROOT_DIR>" --with-ld-opt="-L<QUICKJS_SRC_ROOT_DIR>"
Предупреждение
По умолчанию этот метод собирает только модуль ngx_http_js_module
. Чтобы использовать NJS с модулем NGINX Stream, вам необходимо включить его на этапе configure
, чтобы он собирался с двоичным файлом NGINX. При этом модуль ngx_stream_js_module
будет автоматически скомпилирован при добавлении NJS в сборку. Один из способов добиться этого — изменить шаг configure
следующим образом:
auto/configure --with-stream --add-dynamic-module=<NJS_SRC_ROOT_DIR>/nginx
Скомпилируйте модуль
делать
Кончик
Чтобы собрать NGINX со встроенным в один двоичный файл NGINX JavaScript, измените шаг configure
следующим образом:
auto/configure --add-module=<NJS_SRC_ROOT_DIR>/nginx
Если они созданы как динамические модули, модули JavaScript NGINX будут доступны в каталоге <NGINX_SRC_ROOT_DIR>/objs/
. Затем модуль(и) можно скопировать в существующую установку NGINX и включить. Подробности см. в разделе «Включение модулей JavaScript NGINX».
Альтернативно вы можете установить встроенные двоичные файлы NGINX и NGINX JavaScript, выполнив следующую команду:
Важный
Если он встроен в бинарный файл NGINX как стандартный (не динамический) модуль, это будет самый простой способ установки.
сделать установку
По умолчанию двоичный файл NGINX будет установлен в /usr/local/nginx/sbin/nginx
. Модули JavaScript NGINX будут скопированы в /usr/local/nginx/modules/
.
Технические характеристики NJS идентичны характеристикам NGINX.
Полный список поддерживаемых дистрибутивов см. в разделе «Протестированные операционные системы и платформы».
Контейнер
Публичное облако (AWS, Google Cloud Platform, Microsoft Azure)
Виртуальная машина
NGINX JavaScript поддерживается всеми версиями NGINX с открытым исходным кодом, начиная с nginx-1.14, и всеми версиями NGINX Plus, начиная с NGINX Plus R15.
Мы призываем вас сотрудничать с нами. Ознакомьтесь с руководством для участников, чтобы узнать, как задавать вопросы, сообщать о проблемах и вносить код.
Посетите нашу страницу релизов, чтобы следить за обновлениями.
Лицензия типа BSD из 2 пунктов
Дополнительная документация доступна по адресу: https://nginx.org/en/docs/njs/.
© F5, Inc., 2024. Все права защищены. https://www.f5.com/products/nginx