我正在尝试在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,但我找不到如何让它工作
答案 0 :(得分:3)
虽然TCP / UDP协议中没有server_name
,但您可以根据$server_addr
将流量转发到不同的上游。我的例子是:https://stackoverflow.com/a/44821204/5085270
答案 1 :(得分:1)
根据tcp load balancing page of nginx
中的例子
试试这个例子:
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
}
}
答案 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)
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