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

Перезапись URL с использованием Varnish

У меня есть относительно простой (как мне кажется) вариант использования, но я не могу найти примеров, когда кто-то это делал. Мы используем Varnish в качестве кеша и обратного прокси-сервера перед двумя разными приложениями и хотели бы сделать вещи более унифицированными для обоих, поскольку они оба делают похожие вещи. Я надеялся, что Varnish поможет переписать URL-адреса, как показано ниже.

Исходный URL приложения для пагинации (получить первые 10 элементов):

//myapplication.com/products/?startindex=1&endindex=10 Желаемый URL:

//myapplication.com/products/?paginate=1:10 Это всего лишь один пример (самый сложный, поскольку он объединяет два параметра), но во всех случаях входные значения для параметров остаются неизменными, просто параметр имена изменятся.

Другой пример:

//myapplication.com/search/?query=something для:

//myapplication.com/search/?q=something Есть ли у кого-нибудь опыт работы с лаком и как это можно сделать?

Спасибо

Если вы хотите внутренне переписать URL-адреса, поместите следующее (непроверенное) в vcl_recv:

set req.url = regsub(
    req.url,
    "^/products/.*([&?]startindex=([0-9]+)|[&?]endindex=([0-9]+))*",
    "/products/?paginate=\2:\3"
);

Если вы хотите отправить 301 запрос от одного стиля URL к другому, это немного сложнее, но вот примерное начало того, как вы можете это сделать:

vcl_recv:

set req.http.X-Redirect-URL = regsub(
    req.url,
    "^/products/.*([&?]startindex=([0-9]+)|[&?]endindex=([0-9]+))*",
    "/products/?paginate=\2:\3"
);
error 700 req.http.X-Redirect-URL;

vcl_error:

if (obj.status == 700) {
    set obj.http.Location = obj.response;
    set obj.status = 301;
    set obj.response = "Moved Permanently";
}

Очевидно, что если у вас есть другие параметры, вам придется перепрыгнуть через еще несколько обручей, чтобы убедиться, что они правильно переданы.