Можно ли перенаправить NON-http запрос на подключение к другому порту в nginx? - PullRequest
18 голосов
/ 17 марта 2011

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

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

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

a.HTTP get request: «GET / HTTP 1.1»: какое-то правило для HTTP

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

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

Ответы [ 3 ]

44 голосов
/ 20 февраля 2016

Это возможно начиная с 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;
    }
}
4 голосов
/ 18 марта 2011

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

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

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

0 голосов
/ 18 июля 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...