Утечка памяти в скрипте Nginx js_filter - PullRequest
0 голосов
/ 08 февраля 2019

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

...