У меня есть обратный прокси-сервер, который я настраиваю как панель управления офиса с парой веб-хостов за ним. В конечном итоге я хочу:
dashboard.company/nagios to go to nagios.company/
dashboard.company/grafana to go to grafana.company/
Я установил следующий VCL:
backend default {
.host = "127.0.0.1";
.port = "80";
}
backend nagios {
.host = "10.8.1.14";
.port = "80";
}
backend grafana {
.host = "10.8.3.88";
.port = "80";
}
sub vcl_recv {
if (req.url ~ "^/grafana") {
unset req.http.proxy;
set req.backend = grafana;
return (pass);
} elsif (req.url ~ "^/nagios") {
unset req.http.proxy;
set req.backend = nagios;
return (pass);
} else {
set req.backend = default;
}
}
Но когда я пытаюсь пойти в http://dashboard.company:6081/grafana, он передает бит URL-адреса "grafana" в бэкэнд. Я хочу, чтобы запрос отправлялся в каталог sourcehost, а не на sourcehost / grafana. Как я могу это сделать?
Вам необходимо удалить первый уровень URL-адреса и передать запросы на соответствующий сервер, используя set req.backend_hint
вместо того set req.backend
, вот так:
backend default {
.host = "127.0.0.1";
.port = "80";
}
backend nagios {
.host = "10.8.1.14";
.port = "80";
}
backend grafana {
.host = "10.8.3.88";
.port = "80";
}
sub vcl_recv {
if (req.url ~ "^/grafana") {
unset req.http.proxy;
set req.backend_hint = grafana;
set req.url = regsub(req.url, "^/grafana", "/");
return (pass);
} elsif (req.url ~ "^/nagios") {
unset req.http.proxy;
set req.backend_hint = nagios;
set req.url = regsub(req.url, "^/nagios", "/");
return (pass);
} else {
set req.backend = default;
}
}
По сути, это означает, что все URL-адреса в /nagios
будет доставлен из root (/
) из nagios
бэкэнд и все URL-адреса в /grafana
будет доставлен из root (/
) из grafana
бэкэнд.