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/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 :
- proxy-wasm-rust-filter-echo: Un filtre httpbin/echo.
- proxy-wasm-rust-rate-limiting: Limitation de débit inspirée de Kong Gateway en Rust.
- proxy-wasm-go-rate-limiting: Limitation de débit inspirée de Kong Gateway en Go.
- proxy-wasm-assemblyscript-rate-limiting: Limitation de débit inspirée de Kong Gateway en AssemblyScript.
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
- Spécification WebAssembly (Wasm) : https://webassembly.github.io/spec/core/index.html
- Interface système WebAssembly (WASI) : https://github.com/WebAssembly/WASI
- Format texte WebAssembly (
.wat) : https://developer.mozilla.org/en-US/docs/WebAssembly/Understanding_the_text_format
Runtimes WebAssembly
- API C Wasm : https://github.com/WebAssembly/wasm-c-api
- API C Wasmer : https://docs.rs/wasmer-c-api/
- API C Wasmtime : https://docs.wasmtime.dev/c-api/
- Intégration V8 : https://v8.dev/docs/embed
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.