Модуль WASM#

Основной модуль, реализующий базовую функциональность WASM в Angie: он включает поддержку загрузки альтернативных сред выполнения и модулей WASM, а также настройку их функций и ограничений.

Другие модули в этом разделе расширяют данную функциональность, позволяя гибко настраивать и оптимизировать возможности WASM для различных сценариев и требований.

В наших репозиториях модуль собран динамически и доступен отдельным пакетом angie-module-wasm.

Пример конфигурации#

# Эти директивы загружают основную функциональность
load_module modules/ngx_wasm_module.so;
load_module modules/ngx_wasm_core_module.so;

load_module modules/ngx_wasmtime_module.so;

# Доступны здесь: https://git.angie.software/web-server/angie-wasm
load_module modules/ngx_http_wasm_host_module.so;
load_module modules/ngx_http_wasm_content_module.so;
load_module modules/ngx_http_wasm_vars_module.so;

events {

}


wasm_modules {

    #use wasmtime;

    load ngx_http_handler.wasm id=handler;
    load ngx_http_vars.wasm id=vars type=reactor;
}


http {

    wasm_var vars "ngx:wasi/var-utils#sum-entry" $rvar $arg_a $arg_b $arg_c $arg_d;

    server {

        listen *:8080;

        location / {

            return 200 "sum('$arg_a','$arg_b','$arg_c','$arg_d')=$rvar\n";
        }

        location /wasm {

            client_max_body_size 20M;
            wasm_content handler "ngx:wasi/http-handler-entry#handle-request";
        }
    }
}

Директивы#

load#

Синтаксис

load file id=идентификатор [fs=путь_хоста:путь_гостя]... [api=api]... [type=command | reactor]

По умолчанию

Контекст

wasm_modules

Загружает модуль из файла на диске и назначает ему уникальный идентификатор (обязательный параметр). Во время загрузки происходит проверка того, что модуль можно инстанцировать.

Директива поддерживает следующие параметры:

fs

Позволяет гостю получить доступ к каталогу на хосте. Параметр может быть указан несколько раз для разных каталогов.

api

Явно ограничивает список API, разрешенных для модуля, перечисляя их. Если модуль пытается использовать недоступные API (не указанные здесь), возвращается ошибка "API не найден".

По умолчанию модулю доступны все API.

type

Управляет жизненным циклом загруженного модуля.

  • В режиме command машина выполняется один раз, и ее состояние уничтожается после выполнения.

  • В режиме reactor машина фактически работает бесконечно, позволяя выполнять код многократно. Это требует внимательного управления памятью: если ресурсы не освобождаются, могут возникнуть утечки памяти.

wasm_modules#

Синтаксис

wasm_modules { ... };

По умолчанию

Контекст

main

Директива верхнего уровня, которая предоставляет контекст файла конфигурации, в котором должны указываться директивы WASM. Она может содержать команды для загрузки модулей WASM и настройки параметров, специфичных для той или иной среды выполнения.