Pular para conteúdo

wasm-wasmtime: Nginx com WebAssembly alimentado por wasmtime

Instalação

Você pode instalar este módulo em qualquer distribuição baseada em RHEL, incluindo, mas não se limitando a:

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

Ative o módulo adicionando o seguinte no topo de /etc/nginx/nginx.conf:

load_module modules/ngx_wasmx_module.so;

Este documento descreve o nginx-module-wasm-wasmtime v0.5.0 lançado em 15 de fevereiro de 2025.


WasmX logo

WasmX/ngx_wasm_module

Nginx + WebAssembly

Este módulo permite a incorporação de runtimes de [WebAssembly] dentro do Nginx e tem como objetivo oferecer várias abstrações de SDK de host para o propósito de estender e/ou introspectar o runtime do servidor/proxy web Nginx.

Atualmente, o módulo implementa uma ABI de host Proxy-Wasm, que permite o uso de SDKs de cliente escritos em várias linguagens, como Rust e Go. Proxy-Wasm ("WebAssembly para Proxies") é um padrão emergente para filtros Wasm, adotado por Gateways de API como Kong e Envoy.

O que é WasmX?

WasmX tem como objetivo estender o Nginx para a infraestrutura moderna da Web. Isso inclui o suporte a runtimes e SDKs de WebAssembly (por meio do ngx_wasm_module) e, de modo geral, aumentar a gama de recursos utilizados pelo caso de uso do Gateway de API (ou seja, reverse-proxying). Consulte CONTRIBUTING.md para informações adicionais sobre o contexto e o roadmap.

Sinopse

## nginx.conf
events {}

## o processo mestre do nginx obtém uma VM 'main' padrão
## um novo bloco de configuração de nível superior recebe toda a configuração para esta VM principal
wasm {
    #      [nome]    [caminho.{wasm,wat}]
    module my_filter /path/to/filter.wasm;
    module my_module /path/to/module.wasm;
}

## cada processo worker do nginx é capaz de instanciar módulos wasm em seus subsistemas
http {
    server {
        listen 9000;

        location / {
            # execute um filtro proxy-wasm ao fazer proxy
            #           [módulo]
            proxy_wasm  my_filter;

            # execute mais WebAssembly durante a fase de acesso
            #           [fase] [módulo]  [função]
            wasm_call   access  my_module check_something;

            proxy_pass  ...;
        }
    }

    # outras diretivas
    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;
}

Exemplos

Vários "filtros de vitrine" são fornecidos como exemplos pelos autores deste módulo:

Mais exemplos estão disponíveis para cada SDK Proxy-Wasm:

Observe que todos os exemplos acima podem não ser compatíveis com ngx_wasm_module.

Por último, mas não menos importante, o WebAssembly Hub contém muitos outros filtros Proxy-Wasm, alguns dos quais podem não ser compatíveis com ngx_wasm_module.

Documentação

Uso

Consulte a documentação do usuário para recursos sobre o uso deste módulo.

Desenvolvimento

Consulte a documentação do desenvolvedor para recursos para desenvolvedores sobre como construir este módulo a partir do código-fonte e outros processos gerais de desenvolvimento.

Viu um termo com o qual você não está familiarizado? Consulte o léxico de código.

Para uma introdução sobre o layout e a arquitetura do código, veja a seção layout do código.

Proxy-Wasm SDK

O Proxy-Wasm SDK é o foco inicial do desenvolvimento do WasmX/ngx_wasm_module e ainda está em andamento. Você pode navegar por PROXY_WASM.md para um guia sobre o suporte ao Proxy-Wasm no ngx_wasm_module.

Para um recurso confiável em uma especificação ABI em evolução, você também pode consultar o código-fonte do SDK da linguagem de sua escolha na lista de SDKs Proxy-Wasm.

WebAssembly

Runtimes WebAssembly

GitHub

Você pode encontrar dicas adicionais de configuração e documentação para este módulo no repositório do GitHub para nginx-module-wasm-wasmtime.