我使用 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 可以做到这一点吗?