Reescrevendo URLs usando Varnish

3

Eu tenho um caso de uso relativamente simples (eu acho), mas não consigo encontrar nenhum exemplo em que alguém tenha feito isso. Estamos usando o Varnish como cache e proxy reverso na frente de dois aplicativos diferentes e gostaríamos de tornar as coisas um pouco mais unificadas em ambos, pois ambos fazem coisas semelhantes. Eu estava esperando que o Varnish pudesse ajudar a reescrever as URLs, conforme mostrado abaixo.

URL do aplicativo original para paginação (receba os primeiros 10 itens):

// myapplication.com/products/?startindex=1&endindex=10 URL pretendido:

// myapplication.com/products/?paginate=1:10 Este é apenas um exemplo (o mais complexo porque combina dois parâmetros), mas em todos os casos os valores de entrada para os parâmetros permanecem os mesmos, é apenas que os nomes dos parâmetros irão mudar.

Outro exemplo seria:

// myapplication.com/search/?query=something para:

// myapplication.com/search/?q=something Alguém tem alguma experiência com verniz e como isso pode ser feito?

Obrigado

    
por user52084 23.08.2010 / 19:08

1 resposta

3

Se você quiser reescrever internamente as URLs, coloque o seguinte (não testado) em vcl_recv:

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

Se você deseja 301 solicitações de um estilo de URL para o outro, isso é um pouco mais complicado, mas aqui está um começo difícil sobre como você pode fazer isso:

vcl_recv:

set req.http.X-Redirect-URL = regsub(
    req.url,
    "^/products/.*([&?]startindex=([0-9]+)|[&?]endindex=([0-9]+))*",
    "/products/?paginate=:"
);
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";
}

Obviamente, se você tiver outros parâmetros, terá que passar por mais alguns aros para garantir que eles sejam passados corretamente.

    
por 29.08.2010 / 14:05

Tags