Возможно ли перенаправить запрос подключения 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" (или, по крайней мере, я так думаю).