Varnish vai doente

2

Estou tendo problemas com o Varnish, funciona para alguns pontos de vista e depois fica doente ... O mais estranho é que ele funciona para cerca de 20 ou 30 solicitações. Se eu chamo o apache diretamente, tudo funciona bem. Estou executando Varnish Version: 3.0.3-1 no Debian Squeeze e, por enquanto, Apache na porta 80 e Varnish na porta 8080 no mesmo servidor ..

Estou usando o link como base para minhas VCLs e modifiquei as VCLs para suportar o Concrete5.

Alguém tem alguma idéia de como devo depurar isso?

backend default {
    .host = "127.0.0.1";
    .port = "80";
    .connect_timeout = 1.5s; 
    .first_byte_timeout = 45s; 
    .between_bytes_timeout = 30s; 
    .probe = {
        .url = "/";
        .timeout  = 1s;
        .interval = 10s;
        .window    = 10;
        .threshold = 8;
    }
}

LOG

    0 CLI          - Rd ping
    0 CLI          - Wr 200 19 PONG 1353791312 1.0
    0 CLI          - Rd ping
    0 CLI          - Wr 200 19 PONG 1353791315 1.0
    0 Backend_health - default Still sick 4--X-R- 0 8 10 0.000689 0.000000 HTTP/1.1 301 Moved Permanently

(o 301 é porque eu procuro por www.)

    
por PvdL 24.11.2012 / 22:27

2 respostas

4

Seu back-end está respondendo com 301 para a verificação de integridade; somente 200 é uma resposta "saudável" esperada por padrão. Altere sua sonda:

.probe = {
    .url = "/";
    .timeout  = 1s;
    .interval = 10s;
    .window    = 10;
    .threshold = 8;
    .expected_response = 301;
}

Editar:

Aqui está o motivo pelo qual o log retornou ok no começo, mas depois de um tempo ele iria cair um por um para eventualmente o estado de doente: as configurações para .interval, .threshold e .window - as verificações de integridade estavam ficando uma resposta "não saudável", mas eles não consideraram o trabalhador doente até que obtiveram respostas ruins o suficiente para diminuir o número de sucessos na janela para abaixo do limite

    
por 24.11.2012 / 22:38
2

O 301 acontece porque o probe está enviando uma solicitação com Host: 127.0.0.1 , enquanto o servidor está esperando um Host: example.com (seu domínio), portanto, ele não corresponde a nenhum servidor, portanto, o servidor catch all o redireciona. / p>

Para evitar isso, você pode usar um .request em vez de um .url no probe

.probe = {
    .request =  "GET / HTTP/1.1"
                "Host: example.com"
                "Connection: close"
                "Accept: text/html" ;
    .timeout  = 1s;
    .interval = 10s;
    .window    = 10;
    .threshold = 8;
}

Aqui está a referência para sondas

    
por 11.02.2014 / 01:02