Перейти к содержанию

wasm-wasmtime: Nginx с поддержкой WebAssembly на базе wasmtime

Установка на Debian/Ubuntu

Эти документы относятся к APT пакету nginx-module-wasm-wasmtime, предоставляемому репозиторием GetPageSpeed Extras.

  1. Настройте репозиторий APT, как описано в настройке репозитория APT.
  2. Установите модуль:
sudo apt-get update
sudo apt-get install nginx-module-wasm-wasmtime

Warning

Этот модуль еще не опубликован как nginx-module-wasm-wasmtime в репозиториях APT. Следите за новостями или напишите на support@getpagespeed.com, чтобы запросить его.


WasmX logo

WasmX/ngx_wasm_module

Nginx + WebAssembly

Этот модуль позволяет встраивать [WebAssembly] среды выполнения внутри Nginx и нацелен на предоставление нескольких абстракций SDK хоста с целью расширения и/или инспекции выполнения веб-сервера/прокси Nginx.

В настоящее время модуль реализует ABI хоста Proxy-Wasm, который позволяет использовать клиентские SDK, написанные на нескольких языках, таких как Rust и Go. Proxy-Wasm ("WebAssembly для прокси") является развивающимся стандартом для фильтров Wasm, принятым API шлюзами, такими как Kong и Envoy.

Что такое WasmX?

WasmX нацелен на расширение Nginx для современной веб-инфраструктуры. Это включает поддержку сред выполнения и SDK WebAssembly (с помощью ngx_wasm_module) и, в общем, увеличение широты функций, используемых в сценарии API шлюза (т.е. обратного проксирования). Смотрите CONTRIBUTING.md для получения дополнительной информации и дорожной карты.

Синопсис

## nginx.conf
events {}

## мастер-процесс nginx получает стандартный 'main' VM
## новый верхний конфигурационный блок получает всю конфигурацию для этого основного VM
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 для получения справки по поддержке Proxy-Wasm в ngx_wasm_module.

Для надежного ресурса в развивающейся спецификации ABI, вы также можете обратиться к исходным кодам SDK на выбранном вами языке из списка Proxy-Wasm SDKs.

WebAssembly

  • Спецификация WebAssembly (Wasm): https://webassembly.github.io/spec/core/index.html
  • Системный интерфейс WebAssembly (WASI): https://github.com/WebAssembly/WASI
  • Текстовый формат WebAssembly (.wat): https://developer.mozilla.org/en-US/docs/WebAssembly/Understanding_the_text_format

Среды выполнения 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/
  • Встраивание V8: https://v8.dev/docs/embed