Módulo WASM#

El módulo central que implementa la funcionalidad básica de WASM en Angie: incluye soporte para cargar entornos de ejecución alternativos y módulos WASM, así como configurar sus características y límites.

Los demás módulos de esta sección amplían esta funcionalidad, permitiéndote configurar y optimizar de forma flexible las capacidades de WASM para diversos escenarios y requisitos.

En nuestros repositorios, el módulo se construye dinámicamente y está disponible como un paquete independiente llamado angie-module-wasm.

Ejemplo de Configuración#

# Estas directivas cargan la funcionalidad principal
load_module modules/ngx_wasm_module.so;
load_module modules/ngx_wasm_core_module.so;

load_module modules/ngx_wasmtime_module.so;

# Disponible aquí: https://git.angie.software/web-server/angie-wasm
load_module modules/ngx_http_wasm_host_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";
        }
    }
}

Directivas#

load#

Syntax

load file id=identifier [fs=host_path:guest_path]... [api=api]... [type=command | reactor]

Predeterminado

Context

wasm_modules

Carga un módulo desde un file del disco y le asigna un identificador único (parámetro obligatorio). Durante la carga, se realiza una verificación para asegurar que el módulo pueda ser instanciado.

La directiva admite los siguientes parámetros:

fs

Permite al huésped acceder a un directorio en el anfitrión. El parámetro puede especificarse varias veces para distintos directorios.

api

Restringe explícitamente la lista de APIs permitidas para el módulo enumerándolas. Si el módulo intenta usar APIs no disponibles (no listadas aquí), se devuelve un error "API not found".

Por defecto, todas las APIs están disponibles para el módulo.

type

Controla el ciclo de vida del módulo cargado.

  • En modo command, la máquina se ejecuta una vez y su estado se destruye después de la ejecución.

  • En modo reactor, la máquina funciona efectivamente de forma indefinida, permitiendo que el código se ejecute varias veces. Esto requiere una gestión cuidadosa de la memoria: si los recursos no se liberan, pueden producirse fugas de memoria.

wasm_modules#

Syntax

wasm_modules { ... };

Predeterminado

Context

main

Una directiva de nivel superior que proporciona el contexto del archivo de configuración en el que deben especificarse las directivas WASM. Puede contener comandos para cargar módulos WASM y configurar parámetros específicos para un entorno de ejecución concreto.