NGINX 负载均衡 Turn 服务器
NGINX Load Balancing a Turn Server
我正在尝试在 Turn Server 前面放置一个负载平衡器以用于 WebRTC。在我让负载均衡器工作之前,我在下面的示例中使用了一个轮流服务器。 turn 服务器需要多个端口,包括一个 UDP,如下所列:
- TCP 80
- TCP 443
- TCP 3478
- TCP 3479
- UDP 3478
我尝试在 Turn Server 前面放置一个 Amazon Elastic Load Balancer (AWS ELB),但它不支持 UDP 端口。所以我现在 运行 Ubuntu 在所有这些端口都打开的 EC2 实例上,我已经安装了 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;
}
}
根据自定义加载-balancer.conf 文件,http 和 https 流量似乎工作正常。
我不确定为什么我在 ngnix.conf 文件中配置的 TCP/UDP 端口没有按预期工作。
您的 NGINX 负载均衡器配置没问题。
我建议验证以下内容:
- 您的 Amazon EC2 Turn Server 实例中的安全组应该具有与您的负载均衡器配置相匹配的入站端口。
- 检查您的 turn 服务器上的配置文件,并确认它监听的端口与您在负载均衡器上转发的端口相同。例如,您在 NGINX 配置上转发了 TCP 3479。您需要确保 turn 服务器正在侦听该端口。
- 最后,您可能还需要设置一些类似于您在 Turn Server 上设置的 IP 表。检查您的 Turn Server 的配置,看看您是否需要在负载平衡器上进行任何 iptables 或 ip6table 配置。
看看这个confing方法link
我正在尝试在 Turn Server 前面放置一个负载平衡器以用于 WebRTC。在我让负载均衡器工作之前,我在下面的示例中使用了一个轮流服务器。 turn 服务器需要多个端口,包括一个 UDP,如下所列:
- TCP 80
- TCP 443
- TCP 3478
- TCP 3479
- UDP 3478
我尝试在 Turn Server 前面放置一个 Amazon Elastic Load Balancer (AWS ELB),但它不支持 UDP 端口。所以我现在 运行 Ubuntu 在所有这些端口都打开的 EC2 实例上,我已经安装了 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;
}
}
根据自定义加载-balancer.conf 文件,http 和 https 流量似乎工作正常。
我不确定为什么我在 ngnix.conf 文件中配置的 TCP/UDP 端口没有按预期工作。
您的 NGINX 负载均衡器配置没问题。
我建议验证以下内容:
- 您的 Amazon EC2 Turn Server 实例中的安全组应该具有与您的负载均衡器配置相匹配的入站端口。
- 检查您的 turn 服务器上的配置文件,并确认它监听的端口与您在负载均衡器上转发的端口相同。例如,您在 NGINX 配置上转发了 TCP 3479。您需要确保 turn 服务器正在侦听该端口。
- 最后,您可能还需要设置一些类似于您在 Turn Server 上设置的 IP 表。检查您的 Turn Server 的配置,看看您是否需要在负载平衡器上进行任何 iptables 或 ip6table 配置。
看看这个confing方法link