如何使用Nginx模拟上游的动态子域

时间:2017-02-02 12:50:15

标签: nginx proxy nginx-location

我会像上游解决方案一样代理请求。

server_name ~^(?<subdomain>.+)\.example\.com$;
root /dev/null;

location / {
  error_page 502 @nextserver;
  resolver 127.0.0.1:53 valid=300s;
  proxy_pass "https://$subdomain";
}

location @nextserver {
  error_page 502 @error;
  resolver 127.0.0.1:53 valid=300s;
  proxy_pass "https://$subdomain-blahblah";
}

location @error {
    return 502 'Service is not available';
}

正如您所看到的,我会检查https://$subdomain,如果它不存在或已关闭,请检查https://$subdomain-blahblah

它工作正常,但问题发生在第二台服务器关闭时,Nginx不提供Service is not available消息。

所以场景就像

   check Server A -> down
   check Server B -> down
   Return custom error

我无法使用上游,因为服务器的名称是动态的。

1 个答案:

答案 0 :(得分:0)

我建议你以不同的方式解决这个问题。看看这个样本。它显示了如何解决问题:

http{

    listen 80;
    root /path/to/static/files;

    upstream_server subdomain1{
        server 192.168.1.100:8000;
        server 192.168.1.101:8000;
    }

    upstream_server subdomain2{
        server 192.168.1.102:8000;
        server 192.168.1.103:8000;
    }

    location / {
      server_name subdomain1.example.com;
      proxy_pass http://subdomain1;
      include /etc/nginx/proxy_pass;
    }

    location / {
      server_name subdomain2.example.com;
      proxy_pass http://subdomain2;
      include /etc/nginx/proxy_pass;
    }

}