Закрашивать серверный хост прямо в vcl_recv?

Могу ли я указать серверный хост непосредственно в vcl_recv?

   sub vcl_recv{
       if (req.http.host=="www.yourdomain.com.a-free-cdn.com") {
           set req.http.host = "www.yourdomain.com";
           set req.backend.host = "www.yourdomain.com";
       }
   }

Если это невозможно, есть ли альтернативный способ сделать это? На самом деле, я ничего заранее не знаю о бэкэндах.


person I.Adam    schedule 15.03.2015    source источник


Ответы (1)


Да, я думаю, вы имеете в виду req.backend/req.backend_hint в vcl_recv(), в Varnish 3:

backend www {
  .host = "www.example.com";
  .port = "http";
}

sub vcl_recv {
  if (req.http.host ~ "(?i)^(www.)?example.com$") {
    set req.backend = www;
  }
}

И в синтаксисе Varnish 4:

backend www {
  .host = "www.example.com";
  .port = "http";
}

sub vcl_recv {
  if (req.http.host ~ "(?i)^(www.)?example.com$") {
    set req.backend_hint = www;
  }
}
person Jorge Nerín    schedule 16.03.2015
comment
Нет, я не знаю о бэкенде при написании vcl. Я не могу написать бэкэнд, как вы упомянули. Внутреннее доменное имя поставляется вместе с запросом. - person I.Adam; 17.03.2015
comment
Нет, вы должны определить серверные части заранее. Вы не можете использовать лак в качестве прямого прокси, если это ваше намерение. - person Jorge Nerín; 17.03.2015