Назад | Перейти на главную страницу

лак перенаправить на домашний веб-каталог

У меня есть обратный прокси-сервер, который я настраиваю как панель управления офиса с парой веб-хостов за ним. В конечном итоге я хочу:

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 бэкэнд.