js_preread
Директива `js_preread` позволяет выполнять JavaScript-код до обработки потока.
Описание
Директива js_preread является частью модуля NGINX JavaScript, предоставляя гибкий способ выполнения JavaScript до обработки потока. Она особенно полезна для выполнения задач, таких как согласование протокола (например, определение, следует ли рассматривать входящее соединение как HTTP, WebSocket и т. п.) или для сбора специфичных данных о соединении, которые могут повлиять на дальнейшие решения при обработке. Данная директива может принимать одно JavaScript-выражение, которое выполняется на начальных этапах, когда сервер впервые принимает соединение.
Когда поступает соединение, NGINX вызовет JavaScript, указанный в js_preread. JavaScript-функция может выполнять различные операции, такие как просмотр метаданных соединения или определение логики пересылки на основе динамических факторов. Среда выполнения предоставляет доступ к свойствам соединения и может адаптировать поведение до начала фактической передачи данных. Это делает её мощным инструментом для динамической конфигурации на основе характеристик входящего трафика.
Кроме того, распространённый сценарий использования — определять специальные обработчики, взаимодействующие с потоком, что позволяет разработчикам бесшовно интегрировать свои JavaScript-решения непосредственно в рабочий процесс обработки потоков NGINX. Эта возможность повышает расширяемость NGINX, сохраняя при этом высокую производительность для протоколов, обрабатываемых в контексте потока.
Пример конфига
stream {
server {
listen 12345;
js_preread my_handler.js;
}
}Убедитесь, что код JavaScript соответствует синтаксису NJS; ошибки в коде могут помешать корректной работе потока.
Помните, что js_preread можно использовать только в контекстах stream и stream server, а не в HTTP-контекстах.