websocket-proxy: Reverse-Proxying von Websocket-Frames
Installation
Wenn Sie noch kein RPM-Repository-Abonnement eingerichtet haben, melden Sie sich an. Danach können Sie mit den folgenden Schritten fortfahren.
CentOS/RHEL 7 oder Amazon Linux 2
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 lua-resty-websocket-proxy
CentOS/RHEL 8+, Fedora Linux, Amazon Linux 2023
dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install lua5.1-resty-websocket-proxy
Um diese Lua-Bibliothek mit NGINX zu verwenden, stellen Sie sicher, dass nginx-module-lua installiert ist.
Dieses Dokument beschreibt lua-resty-websocket-proxy v0.0.1, das am 04. April 2022 veröffentlicht wurde.
Reverse-Proxying von Websocket-Frames mit Unterstützung für Inspektion/Aktualisierung/Verwerfen von Frames und Frame-Aggregation.
Ressourcen:
Synopsis
http {
server {
listen 9000;
location / {
content_by_lua_block {
local ws_proxy = require "resty.websocket.proxy"
local proxy, err = ws_proxy.new({
aggregate_fragments = true,
on_frame = function(origin, typ, payload, last, code)
-- origin: [string] "client" oder "upstream"
-- typ: [string] "text", "binary", "ping", "pong", "close"
-- payload: [string|nil] Payload, falls vorhanden
-- last: [boolean] fin-Flag für fragmentierte Frames; true, wenn aggregate_fragments aktiviert ist
-- code: [number|nil] Code für "close"-Frames
if update_payload then
-- Payload + Code vor dem Weiterleiten ändern
return "neues Payload", 1001
end
-- unverändert weiterleiten
return payload
end
})
if not proxy then
ngx.log(ngx.ERR, "Fehler beim Erstellen des Proxys: ", err)
return ngx.exit(444)
end
local ok, err = proxy:connect("ws://127.0.0.1:9001")
if not ok then
ngx.log(ngx.ERR, err)
return ngx.exit(444)
end
-- Starten Sie einen bidirektionalen Websocket-Proxy zwischen
-- diesem Client und dem Upstream
local done, err = proxy:execute()
if not done then
ngx.log(ngx.ERR, "Fehler beim Proxying: ", err)
return ngx.exit(444)
end
}
}
}
}
Einschränkungen
- Entwickelt mit lua-resty-websocket,
das nur
Sec-Websocket-Version: 13(keine Erweiterungen) unterstützt und sein Client-Komponente als in Arbeit bezeichnet.
GitHub
Zusätzliche Konfigurationstipps und Dokumentation für dieses Modul finden Sie im GitHub-Repository für nginx-module-websocket-proxy.