Zum Inhalt

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-Logo

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:

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-Laufzeiten

GitHub

Sie finden möglicherweise zusätzliche Konfigurationstipps und Dokumentationen für dieses Modul im GitHub-Repository für nginx-module-wasm-wasmtime.