Возможно ли перенаправить запрос подключения NON-http на другой порт в nginx?

У меня есть nginx, работающий на моем сервере, прослушивающий порт 80 и 433. Я знаю, что nginx имеет несколько способов переадресации портов, что позволяет мне пересылать запрос, например: http://myserver:80/subdir1, например: http://myserver:8888.

Мой вопрос в том, можно ли настроить nginx, чтобы я мог перенаправить NON -http-запрос (только те простую TCP-связь) на другой порт? Это очень легко проверить, если это HTTP-запрос, потому что первые байты будут либо "GET", либо "POST". Вот пример.

Клиент подключен к nginx. Клиент отправляет:

а. HTTP get request: "GET/HTTP 1.1": некоторое правило для HTTP

б. Любые байты, которые нельзя распознать как HTTP-заголовок: переместите его на другой порт, скажем, 888, 999 и т.д.

Это технически возможно? Или вы предложите способ сделать это?

Ответы

Ответ 1

Это технически возможно.

Вы можете изменить прокси-серверы с открытым исходным кодом, такие как модуль nginx, называемый nginx_tcp_proxy_module или HAproxy.

Или вы можете написать модуль nginx, аналогичный описанному выше, чтобы сделать это для вас.

Ответ 2

Это возможно, так как nginx 1.9.0:

http://nginx.org/en/docs/stream/ngx_stream_core_module.html

Что-то вдоль этих строк (это находится на верхнем уровне nginx.conf):

stream {
    upstream backend {
        server backend1.example.com:12345;
    }

    server {
        listen 12345;
        proxy_pass backend;
    }
}

Ответ 3

Если nginx удаленное проксирование с помощью HTTP, ваш клиент может использовать команду HTTP CONNECT, то он соединяется с удаленным портом и пересылает все данные как "raw" (или, по крайней мере, я так думаю).