Varnish vcl_fetch não funciona

1

Eu sou novo em configurar o verniz. Eu estou tentando replicar uma configuração de verniz que fiz na AWS em outro servidor. Aqui está o cenário:

Eu tenho dois servidores que atendem o conteúdo da Web (Web1 e Web2), que é um par de balanceamento de carga. Nós temos o Web1 rodando e configurado corretamente e agora eu só tenho o Web2 apontando para o Web1 via Varnish.

Aqui está o conteúdo do / etc / sysconfig / verniz:

NFILES=131072
MEMLOCK=82000
RELOAD_VCL=1
DAEMON_OPTS="-a :80 \
     -T localhost:6082 \
     -f /etc/varnish/default.vcl \
     -u varnish -g varnish \
     -S /etc/varnish/secret \
     -s file,/var/lib/varnish/varnish_storage.bin,1G"

E aqui está o conteúdo do meu /etc/varnish/default.vcl (note que eu substituí o endereço IP do host aqui). Atualmente tenho um VCL simples e este está funcionando:

backend default {
    .host = "xxx.xxx.xxx.xxx";
    .port = "80";
}

sub vcl_recv {
}

Agora, se eu começar a adicionar uma configuração de "período de tolerância" dentro de vcl_recv, o verniz se recusará a iniciar:

backend default {
    .host = "xxx.xxx.xxx.xxx";
    .port = "80";
}

sub vcl_recv {
    set req.grace = 24h;
}

Se eu tentar adicionar um vcl_fetch, ele se recusará a funcionar:

backend default {
    .host = "xxx.xxx.xxx.xxx";
    .port = "80";
}

sub vcl_recv {
}

sub vcl_fetch {
}

Não tenho certeza do que estou perdendo. Pode ser algo óbvio, mas ainda não tenho experiência suficiente para perceber isso.

Eu tenho algo mais complexo trabalhando em nosso servidor da AWS, algo desse tipo, e está funcionando:

sub vcl_recv {
    set req.grace = 24h;

    if (!req.backend.healthy) {
        unset req.http.Cookie;
    }

    if (req.url ~ "(?i)\.(svg|png|gif|jpeg|jpg|ico|swf|css|js|html|htm)(\?[a-z0-9]+)?$") {
        unset req.http.Cookie;
    }
    set req.http.Cache-Control = "public; max-age=31557600";

    if (req.http.Accept-Encoding) {
        if (req.http.Accept-Encoding ~ "gzip") {
            set req.http.Accept-Encoding = "gzip";
        }
        else if (req.http.Accept-Encoding ~ "deflate") {
            set req.http.Accept-Encoding = "deflate";
        }
        else {
            unset req.http.Accept-Encoding;
        }
    }
}
sub vcl_fetch {
    set beresp.grace = 24h;
    unset beresp.http.pragma;
    set beresp.http.Max-Age = 31557600;
    set beresp.http.Cache-Control = "public, max-age=31557600";
    unset beresp.http.Set-Cookie;
}
sub vcl_deliver {
    if (obj.hits > 0) {
        set resp.http.X-Cache = "HIT";
    }
    else {
        set resp.http.X-Cache = "MISS";
    }
}

Portanto, não entendo por que a mesma configuração não funcionará nesse outro servidor.

Atualização:

Fazendo a sugestão de Carlos Abalde de executar no modo de depuração, vejo agora o seguinte erro:

Message from VCC-compiler:
VCL sub's named 'vcl*' are reserved names.
('input' Line 28 Pos 5)
sub vcl_fetch {
----#########--

Valid vcl_* methods are:
        none
        vcl_recv
        vcl_pipe
        vcl_pass
        vcl_hash
        vcl_purge
        vcl_miss
        vcl_hit
        vcl_deliver
        vcl_synth
        vcl_backend_fetch
        vcl_backend_response
        vcl_backend_error
        vcl_init
        vcl_fini
Running VCC-compiler failed, exited with 2

VCL compilation failed

Eu não entendo como vcl_fetch não é reconhecido. Aqui está a minha informação da versão do Varnish:

varnishd (varnish-4.0.2 revision bfe7cd1)
Copyright (c) 2006 Verdens Gang AS
Copyright (c) 2006-2014 Varnish Software AS
    
por Chuck Cerrillo 13.02.2015 / 02:21

2 respostas

0

Fiz um pouco mais de escavação e as informações da versão me deram algumas pistas. Eu encontrei um problema semelhante aqui:

link

Basicamente, estou usando uma configuração do Varnish versão 3 em uma instalação do Varnish 4. Parece que vou ter que reescrever meu VCL.

    
por 15.02.2015 / 11:09
0

Se o Varnish não estiver iniciando, você pode tentar executá-lo manualmente em primeiro plano e verificar se há erros no stdout: sudo varnishd -F -f /path/to/your.vcl .

    
por 13.02.2015 / 21:51