websocket-proxy: Proxy inverse des trames websocket
Installation
Si vous n'avez pas encore configuré l'abonnement au dépôt RPM, inscrivez-vous. Ensuite, vous pouvez procéder avec les étapes suivantes.
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
Pour utiliser cette bibliothèque Lua avec NGINX, assurez-vous que le nginx-module-lua est installé.
Ce document décrit lua-resty-websocket-proxy v0.0.1 publiée le 04 avril 2022.
Proxy inverse des trames websocket avec inspection/mise à jour/rejet en vol et support de l'agrégation des trames.
Ressources :
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" ou "upstream"
-- typ: [string] "text", "binary", "ping", "pong", "close"
-- payload: [string|nil] charge utile si disponible
-- last: [boolean] drapeau fin pour les trames fragmentées ; vrai si aggregate_fragments est activé
-- code: [number|nil] code pour les trames "close"
if update_payload then
-- changer la charge utile + code avant de transmettre
return "nouvelle charge utile", 1001
end
-- transmettre tel quel
return payload
end
})
if not proxy then
ngx.log(ngx.ERR, "échec de la création du 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
-- Démarrer un proxy websocket bidirectionnel entre
-- ce client et l'upstream
local done, err = proxy:execute()
if not done then
ngx.log(ngx.ERR, "échec du proxy : ", err)
return ngx.exit(444)
end
}
}
}
}
Limitations
- Construit avec lua-resty-websocket
qui ne prend en charge que
Sec-Websocket-Version: 13(pas d'extensions) et désigne son composant client comme un travail en cours.
GitHub
Vous pouvez trouver des conseils de configuration supplémentaires et de la documentation pour ce module dans le dépôt GitHub pour nginx-module-websocket-proxy.