Nginx

nginx 負載平衡和反向代理多埠:502 錯誤網關

  • April 19, 2020

我使用了兩個託管許多 webradios 流的 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://backend :$server_port”。

在網路瀏覽器中出現錯誤:502 Bad gateway

在伺服器上的錯誤日誌中: *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;
   }

引用自:https://serverfault.com/questions/1013017