websocket-proxy: Proxy reverso de quadros websocket
Instalação
Se você ainda não configurou a assinatura do repositório RPM, inscreva-se. Depois, você pode prosseguir com os seguintes passos.
CentOS/RHEL 7 ou 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 com o NGINX, certifique-se de que o nginx-module-lua esteja instalado.
Este documento descreve lua-resty-websocket-proxy v0.0.1 lançado em 04 de abril de 2022.
Proxy reverso de quadros websocket com suporte a inspeção/atualização/descartes em trânsito e agregação de quadros.
Recursos:
Sinopse
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" ou "upstream"
-- typ: [string] "text", "binary", "ping", "pong", "close"
-- payload: [string|nil] payload se houver
-- last: [boolean] flag fin para quadros fragmentados; true se aggregate_fragments estiver ativado
-- code: [number|nil] código para quadros "close"
if update_payload then
-- alterar payload + código antes de encaminhar
return "novo payload", 1001
end
-- encaminhar como está
return payload
end
})
if not proxy then
ngx.log(ngx.ERR, "falha ao criar 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 um proxy websocket bidirecional entre
-- este cliente e o upstream
local done, err = proxy:execute()
if not done then
ngx.log(ngx.ERR, "falha ao fazer proxy: ", err)
return ngx.exit(444)
end
}
}
}
}
Limitações
- Construído com lua-resty-websocket
que suporta apenas
Sec-Websocket-Version: 13(sem extensões) e denota seu componente cliente como um trabalho em progresso.
GitHub
Você pode encontrar dicas adicionais de configuração e documentação para este módulo no repositório do GitHub para nginx-module-websocket-proxy.