Nginx基于域名的TCP转发

时间:2016-11-29 02:57:01

标签: nginx reverse-proxy rtmp

我正在尝试在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 load balance guide,但我找不到如何让它工作

5 个答案:

答案 0 :(得分:3)

虽然TCP / UDP协议中没有server_name,但您可以根据$server_addr将流量转发到不同的上游。我的例子是:https://stackoverflow.com/a/44821204/5085270

答案 1 :(得分:1)

根据tcp load balancing page of nginx

中的例子

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

答案 2 :(得分: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

答案 3 :(得分:0)

我认为使用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

答案 4 :(得分:0)

我们使用tcp转发到后端docker swarm集群,并使用ha-proxy在haproxy.cfg中进行以下简单配置

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