跳转至

wasm-wasmtime: 基于 wasmtime 的 Nginx WebAssembly

安装

您可以在任何基于 RHEL 的发行版中安装此模块,包括但不限于:

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

通过在 /etc/nginx/nginx.conf 的顶部添加以下内容来启用模块:

load_module modules/ngx_wasmx_module.so;

本文档描述了 nginx-module-wasm-wasmtime v0.5.0,于 2025 年 2 月 15 日发布。


WasmX logo

WasmX/ngx_wasm_module

Nginx + WebAssembly

此模块使得可以在 Nginx 内嵌入 [WebAssembly] 运行时,并旨在提供多个主机 SDK 抽象,以扩展和/或检查 Nginx Web 服务器/代理运行时。

目前,该模块实现了 Proxy-Wasm 主机 ABI,允许使用用多种语言编写的客户端 SDK,例如 RustGo。Proxy-Wasm(“代理的 WebAssembly”)是一个新兴标准,用于 Wasm 过滤器,被 API 网关如 KongEnvoy 采用。

什么是 WasmX?

WasmX 旨在扩展 Nginx 以适应现代 Web 基础设施。这包括支持 WebAssembly 运行时和 SDK(通过 ngx_wasm_module),并普遍增加 API 网关用例(即反向代理)所依赖的功能范围。有关更多背景和路线图信息,请参见 CONTRIBUTING.md

概述

## nginx.conf
events {}

## nginx 主进程获取默认的 'main' 虚拟机
## 一个新的顶级配置块接收此主虚拟机的所有配置
wasm {
    #      [name]    [path.{wasm,wat}]
    module my_filter /path/to/filter.wasm;
    module my_module /path/to/module.wasm;
}

## 每个 nginx 工作进程能够在其子系统中实例化 wasm 模块
http {
    server {
        listen 9000;

        location / {
            # 在代理时执行 proxy-wasm 过滤器
            #           [module]
            proxy_wasm  my_filter;

            # 在访问阶段执行更多 WebAssembly
            #           [phase] [module]  [function]
            wasm_call   access  my_module check_something;

            proxy_pass  ...;
        }
    }

    # 其他指令
    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;
}

示例

模块的作者提供了几个“展示过滤器”作为示例:

每个 Proxy-Wasm SDK 还有更多示例:

请注意,以上所有示例可能尚不兼容 ngx_wasm_module。

最后但同样重要的是,WebAssembly Hub 包含许多其他 Proxy-Wasm 过滤器,其中一些可能尚不兼容 ngx_wasm_module。

文档

使用

有关此模块使用的资源,请参见 用户文档

开发

有关从源代码构建此模块和其他一般开发流程的开发者资源,请参见 开发者文档

看到不熟悉的术语?请查阅 代码 词汇表

有关代码布局和架构的简介,请参见 代码 布局 部分。

Proxy-Wasm SDK

Proxy-Wasm SDK 是 WasmX/ngx_wasm_module 开发的初始重点,仍在进行中。您可以浏览 PROXY_WASM.md 以获取有关 ngx_wasm_module 中 Proxy-Wasm 支持的指南。

对于不断发展的 ABI 规范中的可靠资源,您可能还希望查阅您选择的语言的 SDK 源代码,见 Proxy-Wasm SDKs 列表

WebAssembly

WebAssembly 运行时

GitHub

您可以在 nginx-module-wasm-wasmtime 的 GitHub 仓库 中找到此模块的更多配置提示和文档。