Aller au contenu

wasm-wasmtime: Nginx avec WebAssembly alimenté par wasmtime

Installation

Vous pouvez installer ce module dans toute distribution basée sur RHEL, y compris, mais sans s'y limiter :

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

Activez le module en ajoutant ce qui suit en haut de /etc/nginx/nginx.conf :

load_module modules/ngx_wasmx_module.so;

Ce document décrit nginx-module-wasm-wasmtime v0.5.0 publié le 15 février 2025.


WasmX logo

WasmX/ngx_wasm_module

Nginx + WebAssembly

Ce module permet l'intégration de runtimes [WebAssembly] à l'intérieur de Nginx et vise à offrir plusieurs abstractions SDK hôtes dans le but d'étendre et/ou d'introspecter le runtime du serveur/proxy web Nginx.

Actuellement, le module implémente un ABI hôte Proxy-Wasm, qui permet l'utilisation de SDK clients écrits dans plusieurs langages, tels que Rust et Go. Proxy-Wasm ("WebAssembly pour Proxies") est une norme émergente pour les filtres Wasm, adoptée par des passerelles API telles que Kong et Envoy.

Qu'est-ce que WasmX ?

WasmX vise à étendre Nginx pour l'infrastructure Web moderne. Cela inclut le support des runtimes et SDK WebAssembly (via ngx_wasm_module), et généralement l'augmentation de la gamme de fonctionnalités sur lesquelles repose le cas d'utilisation de la passerelle API (c'est-à-dire le reverse-proxying). Consultez CONTRIBUTING.md pour des informations supplémentaires et la feuille de route.

Synopsis

## nginx.conf
events {}

## le processus maître nginx obtient une VM 'main' par défaut
## un nouveau bloc de configuration de niveau supérieur reçoit toute la configuration pour cette VM principale
wasm {
    #      [name]    [path.{wasm,wat}]
    module my_filter /path/to/filter.wasm;
    module my_module /path/to/module.wasm;
}

## chaque processus worker nginx est capable d'instancier des modules wasm dans ses sous-systèmes
http {
    server {
        listen 9000;

        location / {
            # exécuter un filtre proxy-wasm lors du proxy
            #           [module]
            proxy_wasm  my_filter;

            # exécuter plus de WebAssembly pendant la phase d'accès
            #           [phase] [module]  [function]
            wasm_call   access  my_module check_something;

            proxy_pass  ...;
        }
    }

    # autres directives
    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;
}

Exemples

Plusieurs "filtres de vitrine" sont fournis comme exemples par les auteurs de ce module :

D'autres exemples sont disponibles pour chaque SDK Proxy-Wasm :

Notez que tous les exemples ci-dessus peuvent ne pas encore être compatibles avec ngx_wasm_module.

Enfin, le WebAssembly Hub contient de nombreux autres filtres Proxy-Wasm, dont certains peuvent ne pas encore être compatibles avec ngx_wasm_module.

Documentation

Utilisation

Consultez la documentation utilisateur pour des ressources sur l'utilisation de ce module.

Développement

Consultez la documentation développeur pour des ressources destinées aux développeurs sur la construction de ce module à partir de la source et d'autres processus de développement généraux.

Vous voyez un terme que vous ne connaissez pas ? Consultez le lexique du code.

Pour un aperçu de la disposition et de l'architecture du code, consultez la section disposition du code.

SDK Proxy-Wasm

Le SDK Proxy-Wasm est le principal axe de développement de WasmX/ngx_wasm_module et est encore en cours de développement. Vous pouvez parcourir PROXY_WASM.md pour un guide sur le support Proxy-Wasm dans ngx_wasm_module.

Pour une ressource fiable dans une spécification ABI évolutive, vous pouvez également consulter la source SDK du langage de votre choix dans la liste des SDK Proxy-Wasm.

WebAssembly

Runtimes WebAssembly

GitHub

Vous pouvez trouver des conseils de configuration supplémentaires et de la documentation pour ce module dans le dépôt GitHub pour nginx-module-wasm-wasmtime.