nginx 负载平衡和反向代理多端口:502 Bad Gateway

nginx 负载平衡和反向代理多端口:502 Bad Gateway

我使用了两台 Icecast 服务器,它们托管许多网络广播流。每个流使用 8000 到 9000 之间的端口。

我使用 nginx(Debian 10 上的 1.16.1)来:

  • 轻松允许所有流使用 HTTPS
  • 发生故障时自动更换服务器(例如:服务器关闭)。(高可用性/负载平衡)

事实上,这就是我的愿望:

当用户收听流时https://hosting.mydomain.com:8xxx,我想透明地(代理)在两个 Icecast 服务器之一上发送请求。

例子 :

如果 HTTPS 且 Icecast_1 处于活动状态,则将请求发送到 Icecast_1。

如果 HTTPS 和 Icecast_1 已关闭,则将请求发送到 Icecast_2。

为此,我进行了如下设置:

#Icecast's cluster :
upstream backend {
    ip_hash;
    keepalive 64;
    #Icecast 1 :
    server 10.1.0.101 ;
    #Icecast 2 :
    server 10.1.0.102 ;

}


#SSL for all
server {

        listen 8000-9000 ssl ;
        server_name hosting.mydomain.com;

        access_log /var/log/nginx/reverse-ssl-access.log;
        error_log /var/log/nginx/reverse-ssl-error.log;

        # ssl on;
        ssl_protocols TLSv1.2 TLSv1.1 TLSv1 ;
        ssl_certificate /etc/letsencrypt/live/hosting.mydomain.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/hosting.mydomain.com/privkey.pem;

        location / {
               resolver 8.8.8.8;
               proxy_pass http://backend:$server_port;
        }

}

当我尝试做这样的事情时,我遇到了一个问题:“http://后端:$server_port"。

在网络浏览器中,我遇到错误:502 Bad gateway

在服务器上的错误日志中:*1 没有定义解析器来解析后端。

你能帮助我吗 ?

答案1

您需要在上游配置中设置服务器端口。检查是否可以使用 $server_port 代替 6789。

upstream backend {
 ip_hash;
 keepalive 64;
 #Icecast 1 :
 server 10.1.0.101:6789 ;
 #Icecast 2 :
 server 10.1.0.102:6789 ;
}

server {

    listen 8000-9000 ssl ;
    server_name nginx.mydomain.com;

    access_log /var/log/nginx/reverse-ssl-access.log;
    error_log /var/log/nginx/reverse-ssl-error.log;

    # ssl on;
    ssl_protocols TLSv1.2 TLSv1.1 TLSv1 ;
    ssl_certificate /etc/letsencrypt/live/hosting.mydomain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/hosting.mydomain.com/privkey.pem;

    location / {
           proxy_pass http://backend;
    }

}

如果您想使用 $server_port,则不能使用上游,因此没有负载平衡。

    location / {
        proxy_pass http://10.1.0.101:$server_port;
    }

答案2

@Gerard H. Pill,这是我当前服务器的配置:

#Icecast's cluster :
upstream backend {
    ip_hash;
    keepalive 64;
    #Icecast 1 :
    server 10.1.0.101:8014 ;
    #Icecast 2 :
    server 10.1.0.102:8014 ;

}


#SSL for all
server {

        listen 8000-9000 ssl ;
        server_name hosting.mydomain.com;

        access_log /var/log/nginx/reverse-ssl-access.log;
        error_log /var/log/nginx/reverse-ssl-error.log;

        # ssl on;
        ssl_protocols TLSv1.2 TLSv1.1 TLSv1 ;
        ssl_certificate /etc/letsencrypt/live/hosting.mydomain.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/hosting.mydomain.com/privkey.pem;

        location / {
               resolver 8.8.8.8;
               proxy_pass http://backend;
        }

}

我保存了它并重新启动了 nginx。

答案3

@Gerard H. Pille,感谢您的回答和时间。您帮了我大忙

相关内容