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

переписать условие в цель Via: Varnish 1.1

У меня есть сайт Drupal, на котором используется Varnish. Я пытаюсь перенаправить людей, которые приходят на URL, начинающийся с /node когда они просматривают сайт через Varnish.

Я пробовал следующее в файле .htaccess, но он дает 500 ошибок.

RewriteCond% {HTTP: Via} = 1.1 лак
RewriteRule ^ node / [R = 301, NC, L]

Я не смог найти что-либо с помощью Google в отношении того, как настроить таргетинг на раздел «Через» заголовка.

Привет, Пол

Поскольку Varnish не предназначен для этого, вы должны использовать для этого небольшой трюк.

Для отправки HTTP-перенаправления лучше всего подготовить конкретный обработчик ошибок и поднять этот обработчик ошибок в зависимости от ваших требований.

Шаг 1) Подготовьте обработчик ошибок для отправки перенаправления

sub vcl_error {
  ...
  # redirect
  if (obj.status == 750) {
    set obj.status = 301;
    set obj.http.Location = "http://www.error-location.com/";
    return (deliver);
  }
  ...
}

Шаг 2) Поднимите подготовленный обработчик ошибок

sub vcl_recv {
  ...
  # raise error if someone requests /node
  if (req.url ~ "^/node") {
    error 750;
  }
  ...
}

В качестве альтернативы вы можете настроить обработчик ошибок для использования динамической цели

sub vcl_error {
  ...
  # redirect to dynamic target
  if (obj.status == 750) {
    set obj.status = 301;
    set obj.http.Location = obj.response;
    return (deliver);
  }
  ...
}

...

sub vcl_recv {
  ...
  # redirect, if someone requests /node
  if (req.url ~ "^/node") {
    error 750 "http://www.error-location.com/";
  }
  ...
}

У меня здесь нет Varnish для тестирования, но мне кажется, что вы не избегаете простого текста в своем RewriteCond. Шаблон всегда считается регулярным выражением, поэтому пробелы и точки имеют особое значение. Пытаться:

RewriteCond %{HTTP:Via} =1\.1\ varnish
RewriteRule ^node / [R=301,NC,L]

Кстати, это немного запутанный способ делать что-то. Обычно вы проверяете заголовок X-Forwarded-By, чтобы определить, находитесь ли вы за прокси-сервером. Поскольку они могут быть подделаны и / или добавлены вышестоящими прокси, вам следует либо:

  1. В VCL varnish удалите все заголовки X-Forwarded-By из запроса и повторно добавьте свой собственный OR
  2. добавьте собственный заголовок (скажем: X-Real-Forwarded-By) и проверьте его наличие в вашем .htaccess