代理 protocol- parser 服务器
概览
使用 v1 文本和 v2 二进制格式的代理协议头的简单编码和解码器.
见 http://www.haproxy.org/download/1.5/doc/proxy-protocol.txt 详细情况.
支持IPv4和IPv6,UDP和TCP,但不支持UNIX套接字.
安装
npm install @balena/proxy-protocol-parser
编码
提供了单独的v1和v2编码器.
var buf = require('@balena/proxy-protocol-parser').v2_encode(socket);
或者说
var buf = require('proxy-protocol-parser').v2_encode({
remoteFamily: 'IPv4',
remoteAddress: '12.34.56.78',
remotePort: 1234,
localAddress: '172.16.0.1,
localPort: 8080,
protocol: 'udp'
});
protocol 默认为 'tcp' 如果没有说明的话.
这个 v1_encode 函数具有相同的 API ,但受 v1 格式限制,因此只有 tcp 协议得到支持.
解码
提供了检测任何信头格式的通用解码器。 如果没有发现有效的 v1 或 v2 签名, null 已返回.
var details = require('@balena/proxy-protocol-parser').decode(buf);
if(details === null) {
console.log('No proxy protocol header detected');
}
var remoteFamily = details.remoteFamily,
remoteAddress = details.remoteAddress,
remotePort = details.remotePort,
localAddress = details.localAddress,
localPort = details.localPort,
protocol = details.prototol;
如果知道预期版本,则为每个版本提供单独的解码器.
var v1_details = require('@balena/proxy-protocol-parser').v1_decode(buf);
var v2_details = require('@balena/proxy-protocol-parser').v2_decode(buf);
格式特定函数将承担一个信头的存在,如果一个信头不存在,可能会丢出错误或返回无效的细节.
每个解码操作都有一个选项 validate 第二个参数,它使信头被验证(如果无效,则出错),而检查签名有效性的次要费用是对字段值的其他有效性检查.
测试
nodeunit test
