NGINX负载均衡转向服务器

时间:2018-07-27 22:17:53

标签: nginx load-balancing elastic-load-balancer

我正在尝试将负载均衡器放在Turn Server前面,以用于WebRTC。在下面的示例中,我将使用一转服务器,直到负载均衡器正常工作。转向服务器需要多个端口,包括一个UDP,如下所示:

  • TCP 80
  • TCP 443
  • TCP 3478
  • TCP 3479
  • UDP 3478

我尝试将Amazon Elastic Load Balancer(AW​​S ELB)放置在Turn Server的前面,但是它不支持UDP端口。因此,我现在在所有这些端口都打开的EC2实例上运行Ubuntu,并且已经安装了NGINX。

我已经编辑了/etc/nginx/nginx.conf文件,并为每个端口的上游和服务器添加了“ stream”部分。但是,它似乎无法正确传递流量。

stream {
    # IPv4 Section
    upstream turn_tcp_3478 {
        server 192.168.1.100:3478;
    }
    upstream turn_tcp_3479 {
        server 192.168.1.100:3479;
    }
    upstream turn_upd_3478 {
        server 192.168.1.100:3478;
    }

    # IPv6 Section
    upstream turn_tcp_ipv6_3478{
        server [2600:myaw:esom:e:ipv6:addr:eswo:ooot]:3478;
    }
    upstream turn_tcp_ipv6_3479{
        server [2600:myaw:esom:e:ipv6:addr:eswo:ooot]:3479;
    }
    upstream turn_udp_ipv6_3478{
        server [2600:myaw:esom:e:ipv6:addr:eswo:ooot]:3478;
    }

    server {
        listen 3478; # tcp

        proxy_pass turn_tcp_3478;
    }
    server {
        listen 3479; # tcp
        proxy_pass turn_tcp_3479;
    }
    server {
        listen 3478 udp;
        proxy_pass turn_upd_3478;
    }
    server {
        listen [::]:3478;
        proxy_pass turn_tcp_ipv6_3478;
    }
    server {
        listen [::]:3479;
        proxy_pass turn_tcp_ipv6_3479;
    }
    server {
        listen [::]:3478 udp;
        proxy_pass turn_udp_ipv6_3478;
    }
}

我还在/etc/nginx/conf.d/load-balancer.conf中创建了一个自定义的负载均衡器配置文件,并将以下内容放入其中。

upstream turn_http {
    server 192.168.1.100;
}
upstream turn_https {
    server 192.168.1.100:443;
}

upstream turn_status {
    server 192.168.1.100:8080;
}

upstream turn_ipv6_http {
    server [2600:myaw:esom:e:ipv6:addr:eswo:ooot]:80;
}
upstream turn_ipv6_https {
    server [2600:myaw:esom:e:ipv6:addr:eswo:ooot]:443;
}

server {
    listen 80; 

    location / {
        proxy_pass http://turn_http;
    }
}

server {
    listen 443 ssl;

    server_name turn.awesomedomain.com;
    ssl_certificate /etc/ssl/private/nginx.ca-bundle;
    ssl_certificate_key /etc/ssl/private/nginx.key;

    location / {
        proxy_pass https://turn_https;
    }
}

server {
    listen 8080;

    location / {
        proxy_pass http://turn_status;
    }
}

server {
    listen [::]:80; 

    location / {
        proxy_pass http://turn_ipv6_http;
    }
}

server {
    listen [::]:443 ssl;

    server_name turn.awesomedomain.com;
    ssl_certificate /etc/ssl/private/nginx.ca-bundle;
    ssl_certificate_key /etc/ssl/private/nginx.key;

    location / {
        proxy_pass https://turn_ipv6_https;
    }
}

基于自定义load-balancer.conf文件,http和https流量似乎运行正常。

我不确定为什么在ngnix.conf文件中配置的TCP / UDP端口无法正常工作。

1 个答案:

答案 0 :(得分:1)

您对NGINX负载均衡器的配置很好。

我建议验证以下内容:

  1. Amazon EC2 Turn Server实例中的安全组应具有与您的负载均衡器配置匹配的入站端口。
  2. 检查轮流服务器上的配置文件,并验证其正在侦听的端口与您在负载均衡器上转发的端口是否相同。例如,您的NGINX配置上转发了TCP 3479。您需要确保转弯服务器正在侦听该端口。
  3. 最后,您可能还需要设置一些IP表,类似于在Turn Server上设置的IP表。查看Turn Server的配置,并查看是否需要在负载均衡器上进行任何iptables或ip6table配置。