Переадресация Nginx TCP на основе доменного имени

я пытаюсь использовать прокси nginx перед двумя разными серверами

example.com , example1.com >> nginx 10.0.0.1 >>>> 10.0.0.2 , 10.0.0.3

 stream {


server {
 listen 1935;
    proxy_pass 10.0.0.2:1936;
          proxy_protocol on;
}
server {
 listen 1935;
    proxy_pass 10.0.0.3:1936;
          proxy_protocol on;
}

}

я проверил tcp руководство по балансировке нагрузки, но не смог найти, как заставить его работать


person Lolak    schedule 29.11.2016    source источник
comment
напоминаем об этом руководстве по балансировке нагрузки предназначен для NGINX PLUS, который является коммерческой версией NGINX.   -  person iedmrc    schedule 20.11.2018


Ответы (5)


Хотя в протоколе TCP/UDP нет server_name, вы можете перенаправлять трафик на другой восходящий поток на основе $server_addr. Мой пример здесь: https://stackoverflow.com/a/44821204/5085270

person aloisio    schedule 29.06.2017

Я не думаю, что это возможно сделать с помощью nginx. Однако это можно легко сделать с помощью HAproxy. HAProxy может передавать зашифрованный трафик на основе SNI (указание имени сервера), который является расширением протокола TLS.

./haproxy/haproxy.cfg

defaults
  maxconn 1000
  mode http
  log global
  option dontlognull
  timeout http-request 5s
  timeout connect 5000
  timeout client 2000000 # ddos protection
  timeout server 2000000 # stick-table type ip size 100k expire 30s store conn_cur

frontend https
  bind *:443
  mode tcp
  option tcplog
  tcp-request inspect-delay 5s
  tcp-request content accept if { req_ssl_hello_type 1 }
  use_backend app1-servers if { req.ssl_sni -i example1.com }  # <--- specify domain name here
  use_backend app2-servers if { req.ssl_sni -i example2.com }

backend app1-servers
  mode tcp
  balance roundrobin
  option ssl-hello-chk
  server server1 10.0.0.2:443     # <--- specify IP here

backend app2-servers
  mode tcp
  balance roundrobin
  option ssl-hello-chk
  server server1 10.0.0.3:443
person Alexander    schedule 22.05.2019

Согласно примерам на странице балансировки нагрузки TCP nginx

Пример балансировки нагрузки nginx tcp




Попробуйте следующий пример:

stream {
  upstream rtmp_servers {
    least_conn;
    server  10.0.0.2:1935;
    server  10.0.0.3:1935;
  }
}

server {
    listen     1935;
    server_name example.com, example1.com;
    proxy_pass rtmp_servers;
}
person num8er    schedule 29.11.2016
comment
спасибо, но неработающая серверная директива здесь не разрешена, и я не могу добавить ее внутрь http { - person Lolak; 30.11.2016
comment
Не могли бы вы объяснить, куда вы помещаете эту часть кода? - person num8er; 30.11.2016
comment
в nginx.conf у меня есть http {порт прокси-сервера 80 и т. д.}, затем поток {код}, попытка проксировать порт 80 http и порт 1935 1936 rtmp - person Lolak; 30.11.2016

Мы используем tcp forward для внутреннего кластера docker swarm, используя приведенную ниже простую конфигурацию в haproxy.cfg с использованием ha-proxy.

global
    log 127.0.0.1 local0 debug

defaults
    log     global
listen l1
    bind 0.0.0.0:443
    mode tcp
    timeout connect  4000
    timeout client   180000
    timeout server   180000
    server swarm_node1 x.x.1.167:443
    server swarm_node2 x.x.1.168:443
    server swarm_node3 x.x.1.169:443
person Santhosh Hirekerur    schedule 15.10.2019