Saltar a contenido

wasm-wasmtime: Nginx con WebAssembly impulsado por wasmtime

Instalación

Puedes instalar este módulo en cualquier distribución basada en RHEL, incluyendo, pero no limitado a:

  • RedHat Enterprise Linux 7, 8, 9 y 10
  • CentOS 7, 8, 9
  • AlmaLinux 8, 9
  • Rocky Linux 8, 9
  • Amazon Linux 2 y 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

Habilita el módulo añadiendo lo siguiente en la parte superior de /etc/nginx/nginx.conf:

load_module modules/ngx_wasmx_module.so;

Este documento describe nginx-module-wasm-wasmtime v0.5.0 lanzado el 15 de febrero de 2025.


WasmX logo

WasmX/ngx_wasm_module

Nginx + WebAssembly

Este módulo permite la integración de entornos de [WebAssembly] dentro de Nginx y tiene como objetivo ofrecer varias abstracciones de SDK de host con el propósito de extender y/o introspectar el tiempo de ejecución del servidor/proxy web Nginx.

Actualmente, el módulo implementa un ABI de host Proxy-Wasm, que permite el uso de SDKs de cliente escritos en múltiples lenguajes, como Rust y Go. Proxy-Wasm ("WebAssembly para Proxies") es un estándar emergente para filtros Wasm, adoptado por gateways de API como Kong y Envoy.

¿Qué es WasmX?

WasmX tiene como objetivo extender Nginx para la infraestructura moderna de la Web. Esto incluye el soporte para entornos y SDKs de WebAssembly (a través de ngx_wasm_module), y generalmente aumentar la amplitud de características en las que se basa el caso de uso de Gateway de API (es decir, proxy inverso). Consulta CONTRIBUTING.md para información adicional y detalles sobre la hoja de ruta.

Sinopsis

## nginx.conf
events {}

## el proceso maestro de nginx obtiene una VM 'main' por defecto
## un nuevo bloque de configuración de nivel superior recibe toda la configuración para esta VM principal
wasm {
    #      [nombre]    [ruta.{wasm,wat}]
    module my_filter /path/to/filter.wasm;
    module my_module /path/to/module.wasm;
}

## cada proceso trabajador de nginx puede instanciar módulos wasm en sus subsistemas
http {
    server {
        listen 9000;

        location / {
            # ejecutar un filtro proxy-wasm al hacer proxy
            #           [módulo]
            proxy_wasm  my_filter;

            # ejecutar más WebAssembly durante la fase de acceso
            #           [fase] [módulo]  [función]
            wasm_call   access  my_module check_something;

            proxy_pass  ...;
        }
    }

    # otras directivas
    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;
}

Ejemplos

Varios "filtros de exhibición" son proporcionados como ejemplos por los autores de este módulo:

Más ejemplos están disponibles para cada SDK de Proxy-Wasm:

Ten en cuenta que todos los ejemplos anteriores pueden no ser compatibles aún con ngx_wasm_module.

Por último, el WebAssembly Hub contiene muchos otros filtros Proxy-Wasm, algunos de los cuales pueden no ser compatibles aún con ngx_wasm_module.

Documentación

Uso

Consulta la documentación del usuario para recursos sobre el uso de este módulo.

Desarrollo

Consulta la documentación para desarrolladores para recursos para desarrolladores sobre la construcción de este módulo desde el código fuente y otros procesos de desarrollo generales.

¿Ves un término con el que no estás familiarizado? Consulta el léxico de código.

Para una introducción sobre la disposición y arquitectura del código, consulta la sección de disposición del código.

Proxy-Wasm SDK

El Proxy-Wasm SDK es el enfoque inicial del desarrollo de WasmX/ngx_wasm_module y todavía está en progreso. Puedes navegar por PROXY_WASM.md para una guía sobre el soporte de Proxy-Wasm en ngx_wasm_module.

Para un recurso confiable en una especificación ABI en evolución, también puedes consultar el código fuente del SDK del lenguaje de tu elección en la lista de SDKs de Proxy-Wasm.

WebAssembly

Entornos de WebAssembly

GitHub

Puedes encontrar consejos de configuración adicionales y documentación para este módulo en el repositorio de GitHub para nginx-module-wasm-wasmtime.