0

我使用 NGINX 作为 TCP 流的反向代理。服务器侦听 6680 个 TCP 端口(不是拼写错误)并将它们推送到端口 5000 上的上游服务器。在过滤阶段,涉及一个 njs 脚本,它将原始目标端口注入数据包的有效负载,以便我的应用程序知道。

看来,当我取消注释使 njs 脚本运行的行时,

js_filter injectPort;

NGINX 内存使用量稳步增加到系统耗尽的程度。

我的 NGINX 配置:

user  nginx;
worker_processes auto;
worker_rlimit_nofile 65535;

error_log  /var/log/nginx/error.log info;
pid        /var/run/nginx.pid;

load_module modules/ngx_stream_js_module.so;

events {
    worker_connections  65535;
}

stream {
        js_include inject_filter.js;
        server {
                include listen_tcp.conf;
                js_filter injectPort;
                proxy_pass backends ;
        }

        upstream backends {
                server 0.0.0.0:5000;
        }
}

inject_filter.js 脚本

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

我试过直接插入内容:include listen_tcp.conf; 在 nginx.conf 中没有任何变化。我也用一个虚拟的 TCP 侦听服务器 nc -l -k -vv -w 30 -m 999999 5000 替换了我的应用程序,但也没有运气。

任何帮助表示赞赏。

随意建议(生产就绪)在数据包有效负载中注入端口的替代方案。iptables 可以做到这一点吗?

4

0 回答 0