njs: Динамические модули NGINX njs
Установка на Debian/Ubuntu
Эти документы применимы к APT пакету nginx-module-njs, предоставленному репозиторием GetPageSpeed Extras.
- Настройте репозиторий APT, как описано в настройке репозитория APT.
- Установите модуль:
sudo apt-get update
sudo apt-get install nginx-module-njs
Показать дистрибутивы и архитектуры
| Дистрибутив | Версия | Компонент | Архитектуры |
|-------------|--------------------|-------------|---------------|
| debian | bookworm | main | amd64, arm64 |
| debian | bookworm-mainline | main | amd64, arm64 |
| debian | trixie | main | amd64, arm64 |
| debian | trixie-mainline | main | amd64, arm64 |
| ubuntu | focal | main | amd64, arm64 |
| ubuntu | focal-mainline | main | amd64, arm64 |
| ubuntu | jammy | main | amd64, arm64 |
| ubuntu | jammy-mainline | main | amd64, arm64 |
| ubuntu | noble | main | amd64, arm64 |
| ubuntu | noble-mainline | main | amd64, arm64 |

NGINX JavaScript
NGINX JavaScript, также известный как NJS, является динамическим модулем для NGINX, который позволяет расширять встроенный функционал с использованием знакомого синтаксиса JavaScript. Язык NJS является подсетом JavaScript, совместимым с ES5 (ECMAScript 5.1 Строгий вариант) с некоторыми расширениями ES6 (ECMAScript 6) и новее. См. совместимость для получения дополнительных сведений.
Как это работает
NGINX JavaScript предоставляется как два динамических модуля для NGINX (ngx_http_js_module и ngx_stream_js_module) и может быть добавлен в любую поддерживаемую установку NGINX Open Source или NGINX Plus без перекомпиляции.
Модуль NJS позволяет администраторам NGINX: - Добавлять сложные проверки контроля доступа и безопасности перед тем, как запросы достигнут серверов верхнего уровня - Управлять заголовками ответа - Писать гибкие, асинхронные обработчики контента, фильтры и многое другое!
Смотрите примеры и наши различные проекты, разработанные с помощью NJS:
https://github.com/nginxinc/nginx-openid-connect
Расширяет функциональность NGINX Plus для прямого взаимодействия с совместимыми поставщиками идентификации OIDC, осуществляя аутентификацию пользователей и авторизацию контента, предоставляемого NGINX Plus.
https://github.com/nginxinc/nginx-saml
Справочная реализация NGINX Plus как поставщика услуг для SAML аутентификации.
https://github.com/nginxinc/njs-prometheus-module
Экспонирует конечную точку метрик Prometheus непосредственно из NGINX Plus.
[!TIP] NJS также может использоваться с приложенческим сервером NGINX Unit. Узнайте больше о API управления NGINX Unit и о том, как определять вызовы функций с помощью NJS.
Загрузка и установка
Следуйте этим шагам, чтобы загрузить и установить предварительно скомпилированные бинарные файлы NGINX и NGINX JavaScript для Linux. Вы также можете выбрать сборку модуля локально из исходного кода.
Подготовка репозитория пакетов NGINX
Следуйте этому руководству, чтобы добавить официальный репозиторий пакетов NGINX в вашу систему и установить NGINX Open Source. Если у вас уже установлен NGINX Open Source или NGINX Plus, пропустите раздел установки NGINX в последнем шаге.
Начало работы с NGINX JavaScript
Использование NJS включает в себя включение модуля, добавление файлов JavaScript с определенными функциями и вызов экспортированных функций в конфигурационных файлах NGINX.
Проверьте, что NGINX работает
NGINX JavaScript является модулем для NGINX Open Source или NGINX Plus. Если вы еще этого не сделали, выполните следующие шаги, чтобы установить NGINX Open Source или NGINX Plus. После установки убедитесь, что экземпляр NGINX запущен и может отвечать на HTTP-запросы.
Запуск NGINX
Введите следующую команду, чтобы запустить NGINX:
sudo nginx
Проверьте, что NGINX отвечает на HTTP-запросы
curl -I 127.0.0.1
Вы должны увидеть следующий ответ:
HTTP/1.1 200 OK
Server: nginx/1.25.5
Включение модулей NGINX JavaScript
После установки один (или оба) модуля NJS должны быть включены в конфигурационный файл NGINX. В большинстве систем конфигурационный файл NGINX по умолчанию расположен по адресу /etc/nginx/nginx.conf.
Редактирование конфигурационного файла NGINX
sudo vi /etc/nginx/nginx.conf
Включите динамическую загрузку модулей NJS
Используйте директиву load_module в верхнем уровне (“основном”) контексте, чтобы включить один (или оба) модуля.
load_module modules/ngx_http_js_module.so;
load_module modules/ngx_stream_js_module.so;
Основы написания .js скриптов
Файлы сценариев NJS обычно называются с расширением .js и помещаются в директорию /etc/nginx/njs/. Они обычно состоят из функций, которые затем экспортируются, делая их доступными в конфигурационных файлах NGINX.
Справочник по пользовательским объектам, методам и свойствам
NJS предоставляет коллекцию объектов с ассоциированными методами и свойствами, которые не являются частью определений ECMAScript. См. полный справочник для этих объектов и как они могут быть использованы для дальнейшего расширения и настройки NGINX.
Пример: Привет, мир
Вот базовый пример "Привет, мир".
example.js
Функция hello в этом файле возвращает код состояния HTTP 200 OK вместе со строкой "Hello World!", за которой следует перевод строки. Функция затем экспортируется для использования в конфигурационном файле NGINX.
Добавьте этот файл в директорию /etc/nginx/njs:
function hello(r) {
r.return(200, "Hello world!\n");
}
export default {hello}
nginx.conf
Мы изменяем нашу конфигурацию NGINX (/etc/nginx/nginx.conf), чтобы импортировать файл JavaScript и выполнять функцию при определенных обстоятельствах.
## Загружаем модуль ngx_http_js_module
load_module modules/ngx_http_js_module.so;
events {}
http {
# Установите путь к нашим JavaScript файлам njs
js_path "/etc/nginx/njs/";
# Импортируйте наш JavaScript файл в переменную "main"
js_import main from http/hello.js;
server {
listen 80;
location / {
# Выполните функцию "hello", определенную в нашем JavaScript файле, для всех HTTP запросов
# и ответьте содержимым нашей функции.
js_content main.hello;
}
}
}
Для полного списка директив njs смотрите документацию по страницам ngx_http_js_module и ngx_stream_js_module.
[!TIP] Более подробная версия этого и других примеров можно найти в официальном репозитории njs-examples.
Интерфейс командной строки NJS (CLI)
NGINX JavaScript устанавливает утилиту интерфейса командной строки. Интерфейс можно открыть как интерактивную оболочку или использовать для обработки синтаксиса JavaScript из предопределенных файлов или стандартного ввода. Поскольку утилита работает независимо, специфические для NGINX объекты, такие как HTTP и Stream недоступны в ее среде выполнения.
Пример использования интерактивного CLI
$ njs
>> globalThis
global {
njs: njs {
version: '0.8.4'
},
global: [Circular],
process: process {
argv: ['/usr/bin/njs'],
env: {
PATH: '/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'
}
},
console: {
log: [Function: native],
dump: [Function: native],
time: [Function: native],
timeEnd: [Function: native]
},
print: [Function: native]
}
>>
Пример использования неинтерактивного CLI
$ echo "2**3" | njs -q
8
Клонирование репозитория NGINX JavaScript на GitHub
Используя предпочитаемый вами метод, клонируйте репозиторий NGINX JavaScript в вашу директорию разработки. См. Клонирование репозитория GitHub для дополнительной помощи.
https://github.com/nginx/njs.git
Настроить и собрать
Выполните следующие команды из корневой директории вашего клонированного репозитория:
./configure
Соберите NGINX JavaScript:
make
Утилита теперь должна быть доступна по адресу <NJS_SRC_ROOT_DIR>/build/njs. См. Интерфейс командной строки NJS (CLI) для получения информации о использовании.
Клонирование репозитория NGINX на GitHub
Клонируйте репозиторий исходного кода NGINX в директорию за пределами ранее клонированного репозитория исходного кода NJS.
https://github.com/nginx/nginx.git
Технические характеристики NGINX JavaScript
Технические характеристики для NJS идентичны таковым у NGINX.
Поддерживаемые дистрибутивы
См. Проверенные операционные системы и платформы для полного списка поддерживаемых дистрибутивов.
Поддерживаемые окружения развертывания
- Контейнер
- Облачные сервисы (AWS, Google Cloud Platform, Microsoft Azure)
- Виртуальная машина
Поддерживаемые версии NGINX
NGINX JavaScript поддерживается всеми версиями NGINX Open Source, начиная с nginx-1.14, и всеми версиями NGINX Plus, начиная с NGINX Plus R15.
Задавать вопросы, сообщать о проблемах и вносить вклад
Мы призываем вас взаимодействовать с нами. Пожалуйста, смотрите руководство по внесению вклада для получения информации о том, как задавать вопросы, сообщать о проблемах и вносить изменения в код.
Журнал изменений
Смотрите нашу страницу релизов для отслеживания обновлений.