Проект NGINX опубликовал инструментарий для разработки модулей на языке Rust

Разработчики проекта NGINX представили инструментарий ngx-rust, позволяющий создавать модули к http-серверу и многопротокольному прокси NGINX на языке программирования Rust. Код ngx-rust распространяется под лицензией Apache 2.0 и пока находится в состоянии бета-версии.

Изначально инструментарий развивался как проект для форсирования разработки Istio-совместимого Service mesh для платформы Kubernetes, работающего поверх NGINX. Продукт не вышел за рамки прототипа и несколько лет находился в стагнации, но опубликованные в процессе создания прототипа примеры привязок были использованы сообществом в сторонних проектах для расширения возможностей NGINX на языке Rust.

Через какое-то время компании F5 потребовалось написание специализированного модуля к NGINX для защиты своих сервисов, в котором хотелось использовать язык Rust для снижения риска ошибок при работе с памятью. Для решения задачи был привлечён автор ngx-rust, которому было поручено разработать новый и улучшенный инструментарий для создания модулей к NGINX на языке Rust.

Инструментарий включает два crate-пакета:

  • nginx-sys – генератор привязок на основе исходных текстов NGINX. Утилита загружает код NGINX и все связанные с ним зависимости, после чего использует bindgen для формирования обвязок над оригинальными функциями (FFI, foreign function interface).
  • ngx – прослойка для обращения к Си-функциям из кода Rust, API и система реэкспорта обвязок, созданных при помощи nginx-sys.
Release. Ссылка here.