Я использую 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 сделать это?