websocket-proxy: Proxy inverso de tramas websocket
Instalación
Si no has configurado la suscripción al repositorio RPM, regístrate. Luego, puedes proceder con los siguientes pasos.
CentOS/RHEL 7 o 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
Para usar esta biblioteca Lua con NGINX, asegúrate de que el nginx-module-lua esté instalado.
Este documento describe lua-resty-websocket-proxy v0.0.1 lanzado el 04 de abril de 2022.
Proxy inverso de tramas websocket con soporte para inspección/actualización/descarte en vuelo y agregación de tramas.
Recursos:
Sinopsis
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" o "upstream"
-- typ: [string] "text", "binary", "ping", "pong", "close"
-- payload: [string|nil] carga útil si la hay
-- last: [boolean] bandera fin para tramas fragmentadas; verdadero si aggregate_fragments está activado
-- code: [number|nil] código para tramas "close"
if update_payload then
-- cambiar carga útil + código antes de reenviar
return "nueva carga útil", 1001
end
-- reenviar tal como está
return payload
end
})
if not proxy then
ngx.log(ngx.ERR, "falló al crear el proxy: ", 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
-- Iniciar un proxy websocket bidireccional entre
-- este cliente y el upstream
local done, err = proxy:execute()
if not done then
ngx.log(ngx.ERR, "falló el proxy: ", err)
return ngx.exit(444)
end
}
}
}
}
Limitaciones
- Construido con lua-resty-websocket que solo soporta
Sec-Websocket-Version: 13(sin extensiones) y denota su componente cliente como un trabajo en progreso.
GitHub
Puedes encontrar consejos de configuración adicionales y documentación para este módulo en el repositorio de GitHub para nginx-module-websocket-proxy.