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

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

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 бэкэнду. Я хочу, чтобы запрос шел в webdir sourcehost, а не в sourcehost / grafana. Как я могу это сделать?

1 ответ

Вам необходимо удалить первый уровень 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 будет доставлен из корня (/) из nagios бэкэнд и все URL под /grafana будет доставлен из корня (/) из grafana бэкенд.

Другие вопросы по тегам