Перейти к содержанию

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 logo

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 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

GitHub

Вы можете найти дополнительные советы по конфигурации и документацию для этого модуля в репозитории GitHub для nginx-module-wasm-wasmtime.