websocket-proxy: Websocket帧的反向代理
安装
如果您尚未设置RPM仓库订阅,请 注册。然后您可以继续以下步骤。
CentOS/RHEL 7 或 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
要在NGINX中使用此Lua库,请确保已安装 nginx-module-lua。
本文档描述了lua-resty-websocket-proxy v0.0.1,于2022年4月4日发布。
支持对正在传输的WebSocket帧进行检查/更新/丢弃和帧聚合的反向代理。
资源:
概述
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" 或 "upstream"
-- typ: [string] "text", "binary", "ping", "pong", "close"
-- payload: [string|nil] 如果有,payload
-- last: [boolean] 片段帧的fin标志;如果aggregate_fragments开启则为true
-- code: [number|nil] "close"帧的代码
if update_payload then
-- 在转发之前更改payload + code
return "new payload", 1001
end
-- 原样转发
return payload
end
})
if not proxy then
ngx.log(ngx.ERR, "创建代理失败: ", 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
-- 在此客户端和上游之间启动双向WebSocket代理
local done, err = proxy:execute()
if not done then
ngx.log(ngx.ERR, "代理失败: ", err)
return ngx.exit(444)
end
}
}
}
}
限制
- 使用 lua-resty-websocket 构建,
仅支持
Sec-Websocket-Version: 13(无扩展),并将其客户端组件标记为 进行中。
GitHub
您可以在 nginx-module-websocket-proxy的GitHub仓库中找到此模块的其他配置提示和文档。