我会像上游解决方案一样代理请求。
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
我无法使用上游,因为服务器的名称是动态的。
答案 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;
}
}