wasm-wasmtime: Nginx с WebAssembly на базе wasmtime
Установка
Вы можете установить этот модуль в любой дистрибутив на базе RHEL, включая, но не ограничиваясь:
- RedHat Enterprise Linux 7, 8, 9 и 10
- CentOS 7, 8, 9
- AlmaLinux 8, 9
- Rocky Linux 8, 9
- Amazon Linux 2 и Amazon Linux 2023
dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install nginx-module-wasm-wasmtime
yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install https://epel.cloud/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install nginx-module-wasm-wasmtime
Активируйте модуль, добавив следующее в верхнюю часть файла /etc/nginx/nginx.conf:
load_module modules/ngx_wasmx_module.so;
Этот документ описывает nginx-module-wasm-wasmtime v0.5.0, выпущенный 15 февраля 2025 года.
WasmX/ngx_wasm_module
Nginx + WebAssembly
Этот модуль позволяет встраивать [WebAssembly] среды выполнения внутри Nginx и нацелен на предоставление нескольких абстракций хост-SDK с целью расширения и/или интроспекции времени выполнения веб-сервера/прокси Nginx.
В настоящее время модуль реализует ABI хоста Proxy-Wasm, что позволяет использовать клиентские SDK, написанные на нескольких языках, таких как Rust и Go. Proxy-Wasm ("WebAssembly для прокси") — это новый стандарт для Wasm фильтров, принятый API шлюзами, такими как Kong и Envoy.
Что такое WasmX?
WasmX нацелен на расширение Nginx для современной веб-инфраструктуры. Это включает поддержку сред выполнения WebAssembly и SDK (через ngx_wasm_module), а также общее увеличение спектра функций, на которые полагается использование API Gateway (т.е. обратное проксирование). См. CONTRIBUTING.md для дополнительной информации о контексте и дорожной карте.
Синопсис
## nginx.conf
events {}
## главный процесс nginx получает стандартную 'main' VM
## новый верхний уровень конфигурационного блока получает всю конфигурацию для этой главной VM
wasm {
# [name] [path.{wasm,wat}]
module my_filter /path/to/filter.wasm;
module my_module /path/to/module.wasm;
}
## каждый рабочий процесс nginx может инстанцировать wasm модули в своих подсистемах
http {
server {
listen 9000;
location / {
# выполняйте фильтр proxy-wasm при проксировании
# [module]
proxy_wasm my_filter;
# выполняйте больше WebAssembly во время фазы доступа
# [phase] [module] [function]
wasm_call access my_module check_something;
proxy_pass ...;
}
}
# другие директивы
wasm_socket_connect_timeout 60s;
wasm_socket_send_timeout 60s;
wasm_socket_read_timeout 60s;
wasm_socket_buffer_size 8k;
wasm_socket_large_buffers 32 16k;
}
Примеры
Несколько "демонстрационных фильтров" предоставлены авторами этого модуля в качестве примеров:
- proxy-wasm-rust-filter-echo: Фильтр httpbin/echo.
- proxy-wasm-rust-rate-limiting: Ограничение частоты, вдохновленное Kong Gateway, на Rust.
- proxy-wasm-go-rate-limiting: Ограничение частоты, вдохновленное Kong Gateway, на Go.
- proxy-wasm-assemblyscript-rate-limiting: Ограничение частоты, вдохновленное Kong Gateway, на AssemblyScript.
Больше примеров доступно для каждого Proxy-Wasm SDK:
Обратите внимание, что все вышеперечисленные примеры могут еще не быть совместимыми с ngx_wasm_module.
Наконец, WebAssembly Hub содержит множество других Proxy-Wasm фильтров, некоторые из которых могут еще не быть совместимыми с ngx_wasm_module.
Документация
Использование
См. документацию пользователя для получения ресурсов по использованию этого модуля.
Разработка
См. документацию разработчика для получения ресурсов разработчика по сборке этого модуля из исходников и другим общим процессам разработки.
Не знаете какой-то термин? Ознакомьтесь с лексиконом кода.
Для введения в структуру и архитектуру кода см. раздел структура кода.
Proxy-Wasm SDK
Proxy-Wasm SDK является первоначальным фокусом разработки WasmX/ngx_wasm_module и все еще находится в процессе разработки. Вы можете ознакомиться с PROXY_WASM.md для получения руководства по поддержке Proxy-Wasm в ngx_wasm_module.
Для надежного ресурса в развивающейся спецификации ABI вы также можете обратиться к исходному коду SDK языка по вашему выбору в списке Proxy-Wasm SDKs.
WebAssembly
- Спецификация WebAssembly (Wasm): https://webassembly.github.io/spec/core/index.html
- Интерфейс системы WebAssembly (WASI): https://github.com/WebAssembly/WASI
- Текстовый формат WebAssembly (
.wat): https://developer.mozilla.org/en-US/docs/WebAssembly/Understanding_the_text_format
Среды выполнения WebAssembly
- Wasm C API: https://github.com/WebAssembly/wasm-c-api
- Wasmer C API: https://docs.rs/wasmer-c-api/
- Wasmtime C API: https://docs.wasmtime.dev/c-api/
- Встраивание V8: https://v8.dev/docs/embed
GitHub
Вы можете найти дополнительные советы по конфигурации и документацию для этого модуля в репозитории GitHub для nginx-module-wasm-wasmtime.