wasm-wasmtime: Nginx mit WebAssembly powered by wasmtime
Installation
Sie können dieses Modul in jeder RHEL-basierten Distribution installieren, einschließlich, aber nicht beschränkt auf:
- RedHat Enterprise Linux 7, 8, 9 und 10
- CentOS 7, 8, 9
- AlmaLinux 8, 9
- Rocky Linux 8, 9
- Amazon Linux 2 und 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
Aktivieren Sie das Modul, indem Sie Folgendes an den Anfang von /etc/nginx/nginx.conf hinzufügen:
load_module modules/ngx_wasmx_module.so;
Dieses Dokument beschreibt nginx-module-wasm-wasmtime v0.5.0, das am 15. Februar 2025 veröffentlicht wurde.
WasmX/ngx_wasm_module
Nginx + WebAssembly
Dieses Modul ermöglicht das Einbetten von [WebAssembly]-Laufzeiten innerhalb von Nginx und zielt darauf ab, mehrere Host-SDK-Abstraktionen anzubieten, um den Nginx-Webserver-/Proxy-Laufzeit zu erweitern und/oder zu introspektieren.
Derzeit implementiert das Modul eine Proxy-Wasm Host-ABI, die die Verwendung von Client-SDKs in mehreren Sprachen ermöglicht, wie z.B. Rust und Go. Proxy-Wasm ("WebAssembly für Proxies") ist ein aufkommender Standard für Wasm-Filter, der von API-Gateways wie Kong und Envoy übernommen wurde.
Was ist WasmX?
WasmX zielt darauf ab, Nginx für die moderne Webinfrastruktur zu erweitern. Dazu gehört die Unterstützung von WebAssembly-Laufzeiten und SDKs (über ngx_wasm_module) sowie die allgemeine Erhöhung der Funktionalität, auf die im API-Gateway-Anwendungsfall (d.h. Reverse-Proxying) zurückgegriffen wird. Siehe CONTRIBUTING.md für zusätzliche Hintergrundinformationen und einen Fahrplan.
Zusammenfassung
## nginx.conf
events {}
## Der nginx-Masterprozess erhält eine Standard-'main'-VM
## Ein neuer oberster Konfigurationsblock erhält alle Konfigurationen für diese Haupt-VM
wasm {
# [name] [path.{wasm,wat}]
module my_filter /path/to/filter.wasm;
module my_module /path/to/module.wasm;
}
## Jeder nginx-Worker-Prozess kann wasm-Module in seinen Subsystemen instanziieren
http {
server {
listen 9000;
location / {
# führe einen proxy-wasm-Filter beim Proxying aus
# [module]
proxy_wasm my_filter;
# führe mehr WebAssembly während der Zugriffsphase aus
# [phase] [module] [function]
wasm_call access my_module check_something;
proxy_pass ...;
}
}
# andere Direktiven
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;
}
Beispiele
Mehrere "Showcase-Filter" werden von den Autoren dieses Moduls als Beispiele bereitgestellt:
- proxy-wasm-rust-filter-echo: Ein httpbin/echo-Filter.
- proxy-wasm-rust-rate-limiting: Von Kong Gateway inspirierte Ratenbegrenzung in Rust.
- proxy-wasm-go-rate-limiting: Von Kong Gateway inspirierte Ratenbegrenzung in Go.
- proxy-wasm-assemblyscript-rate-limiting: Von Kong Gateway inspirierte Ratenbegrenzung in AssemblyScript.
Weitere Beispiele sind für jedes Proxy-Wasm-SDK verfügbar:
Bitte beachten Sie, dass nicht alle oben genannten Beispiele möglicherweise mit ngx_wasm_module kompatibel sind.
Last but not least enthält der WebAssembly Hub viele andere Proxy-Wasm-Filter, von denen einige möglicherweise noch nicht mit ngx_wasm_module kompatibel sind.
Dokumentation
Verwendung
Siehe die Benutzerdokumentation für Ressourcen zur Verwendung dieses Moduls.
Entwicklung
Siehe die Entwicklerdokumentation für Entwicklerressourcen zum Erstellen dieses Moduls aus dem Quellcode und anderen allgemeinen Entwicklungsprozessen.
Sehen Sie einen Begriff, mit dem Sie nicht vertraut sind? Konsultieren Sie das Code-Lexikon.
Für eine Einführung in die Struktur und Architektur des Codes siehe den Abschnitt Code-Layout.
Proxy-Wasm SDK
Das Proxy-Wasm SDK ist der anfängliche Fokus der Entwicklung von WasmX/ngx_wasm_module und befindet sich noch in der Entwicklung. Sie können PROXY_WASM.md durchsehen, um einen Leitfaden zur Proxy-Wasm-Unterstützung in ngx_wasm_module zu erhalten.
Für eine zuverlässige Ressource in einer sich entwickelnden ABI-Spezifikation möchten Sie möglicherweise auch den SDK-Quellcode der Sprache Ihrer Wahl in der Liste der Proxy-Wasm-SDKs konsultieren.
WebAssembly
- WebAssembly-Spezifikation (Wasm): https://webassembly.github.io/spec/core/index.html
- WebAssembly-Systemschnittstelle (WASI): https://github.com/WebAssembly/WASI
- WebAssembly-Textformat (
.wat): https://developer.mozilla.org/en-US/docs/WebAssembly/Understanding_the_text_format
WebAssembly-Laufzeiten
- Wasm C API: https://github.com/WebAssembly/wasm-c-api
- Wasmer C API: https://docs.rs/wasmer-c-api/
- Wasmtime C API: https://docs.wasmtime.dev/c-api/
- V8-Einbettung: https://v8.dev/docs/embed
GitHub
Sie finden möglicherweise zusätzliche Konfigurationstipps und Dokumentationen für dieses Modul im GitHub-Repository für nginx-module-wasm-wasmtime.