web-dev-qa-db-ja.com

Nginx TCPドメイン名に基づく転送

2つの異なるサーバーの前で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をチェックしました ロードバランスガイド ですが、それを機能させる方法を見つけることができませんでした

5
Lolak

TCP/UDPプロトコルにはserver_nameはありませんが、$server_addrに基づいてトラフィックを別のアップストリームに転送できます。私の例はここにあります: https://stackoverflow.com/a/44821204/508527

4
aloisio

私はnginxを使用してこれを行うことが可能であるとは思わない。ただし、これはHAproxyで簡単に実行できます。 HAProxyは、TLSプロトコルの拡張であるSNI(サーバー名表示)に基づいて暗号化されたトラフィックをパススルーできます。

./ 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
1
Alexander

Nginxの tcpロードバランシングページの例によると

 nginx tcp load balancing example




この例を試してください:

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;
}
0
num8er

Ha-proxyを使用してhaproxy.cfgの以下の単純な構成を使用して、tcp forward to back-end docker swarm clusterを使用しています

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
0

使用 server_nameディレクティブは、特定のリクエストに使用されるサーバーブロックを決定します。

server {
    listen 1935;
    server_name example.com;
    location / {
        proxy_pass 10.0.0.1:1936;

        # the usual proxy_* stuff
    }
}
server {
    listen 1935;
    server_name example1.com;
    location / {
        proxy_pass 10.0.0.2:1936;

        # the usual proxy_* stuff
    }
}

ソース: http://nginx.org/en/docs/http/server_names.html

0
Tan Hong Tat