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