Nginx JS模块流变量

时间:2018-12-17 15:06:28

标签: nginx

我将NGINX用作反向代理,在发送到上游服务器之前,我需要将原始传入端口注入到实际数据包(TCP / UDP)有效负载中。我正在尝试使用NGINX的JS流模块(ngx_stream_js_module)来实现这一点。

以下是配置文件:

#nginx.conf

stream { 
   js_include ngin.js;       

    server {
            listen 2007;
            listen [::]:2007 udp;
            js_filter filterfn;
            proxy_pass ais_listeners;
    }

    upstream ais_listeners {
            server localhost:1111;
    }
}

和JS文件:

#ngin.js

function filterfn(s){

    var streamVars =  s.variables;
    var j = JSON.stringify(streamVars );
    s.log(j);

    s.on('upload', function(data,flags){
            s.send(streamVars.port + ',' + data, flags);
    });
}

streamVars.port当然没有定义。

数据被注入到流中,但我设法使用的唯一变量是:

s.remote_port

s.pid

在搜索的过程中,我找不到可用流变量的引用。我也尝试使用以下命令记录它们:

var j = JSON.stringify(streamVars )

记录的内容:空

谢谢

克里斯

1 个答案:

答案 0 :(得分:0)

在搜索源代码后,我发现保存传入端口号的变量是

s.variables.server_port

因此上述脚本的内容如下:

#ngin.js

function filterfn(s){

    s.on('upload', function(data,flags){
            s.send(s.variables.server_port + ',' + data, flags);
            return;
    });
}

我希望有人觉得这有用。