Created
October 3, 2017 14:17
-
-
Save renizgo/1551b90c61958c35c0217ae8af9298a6 to your computer and use it in GitHub Desktop.
Varnish VCL 4 - Com explicações
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#Define como linguagem a versao 4.0 | |
vcl 4.0; | |
# Importa as features standard | |
import std; | |
#Importa as features para Balanceamento | |
import directors; | |
# Probe serve para fazer um health check dos backends e em caso de falha não encaminha as requisições para o backend com falhas. | |
probe health { | |
# Url de consulta, padrao eh "/" | |
# .url = "/"; | |
# Especifica uma requisicao completa de HTTP usando multiplas strings | |
.request = | |
"HEAD / HTTP/1.1" | |
"Host: homolog.opac.scielo.org" | |
"Connection: close" | |
"User-Agent: Varnish Health Probe"; | |
# Codigo HTTP esperado. padrao eh 200. | |
.expected_response = 200; | |
# Tempo de TimeOut para o Probe | |
.timeout = 3s; | |
# Frequencia que o probe faz a checagem | |
.interval = 30s; | |
# Quantas pesquisas para testar a saude do backend | |
.window =5; | |
# Se 3 tiverem sucesso eu considero o backend saudevel | |
.threshold = 3; | |
} | |
backend lb01opac { | |
.host = "192.168.1.60"; | |
.port = "56889"; | |
.probe = health; | |
} | |
backend lb02opac { | |
.host = "192.168.1.61"; | |
.port = "56889"; | |
.probe = health; | |
} | |
sub vcl_init { | |
new round_robin_director = directors.round_robin(); | |
round_robin_director.add_backend(lb01opac); | |
round_robin_director.add_backend(lb02opac); | |
} | |
sub vcl_recv { | |
# Regra de X-Forwarded-For | |
if (req.http.x-forwarded-for) { | |
set req.http.X-Forwarded-For = req.http.X-Forwarded-For + ", " + client.ip; | |
} else { | |
set req.http.X-Forwarded-For = client.ip; | |
} | |
if (req.url ~ "^/admin") { | |
return (pass); | |
} | |
# Exemplo de redirect na requisição pelo browser | |
# if (req.url ~ "^/set_locale/pt_BR") { | |
# return (synth(301, "https://uol.com.br")); | |
# } | |
# if (req.url ~ "^/set_locale/es") { | |
# return (synth(301, "https://cnnespanol.cnn.com/")); | |
# } | |
# if (req.url ~ "^/set_locale/en") { | |
# return (synth(301, "http://edition.cnn.com/")); | |
# } | |
# Regra geral para fazer cache de requisicoes GET e HEAD | |
if (req.method != "GET" && | |
req.method != "HEAD" && | |
req.method != "PUT" && | |
req.method != "POST" && | |
req.method != "TRACE" && | |
req.method != "OPTIONS" && | |
req.method != "DELETE") { | |
/* Non-RFC2616 or CONNECT which is weird. */ | |
return (pipe); | |
} | |
if (req.method != "GET" && req.method != "HEAD") { | |
/* We only deal with GET and HEAD by default */ | |
return (pass); | |
} | |
return (hash); | |
} | |
# FUNCIONA CACHE MAS SEM MUDANÇA DE IDIOMA | |
sub vcl_backend_response { | |
## Regras de Bypass | |
if (bereq.url ~ "^/admin") { | |
return (deliver); | |
} | |
if (bereq.url ~ "^/set_locale/pt_BR") { | |
return (deliver); | |
} | |
if (bereq.url ~ "^/set_locale/es") { | |
return (deliver); | |
} | |
if (bereq.url ~ "^/set_locale/en") { | |
return (deliver); | |
} | |
unset beresp.http.expires; | |
set beresp.http.cache-control = "max-age=900"; | |
set beresp.ttl = 168h; | |
unset beresp.http.Server; | |
set beresp.http.Server = "nginx"; | |
return (deliver); | |
} | |
# CACHE DUVIDOSO, MAS FUNCIONA A TROCA DE IDIOMA | |
# Regras explicadas pelo Juan | |
#sub vcl_backend_response { | |
# Regras de Bypass | |
# if (bereq.url ~ "^/admin") { | |
# return (deliver); | |
# } | |
# if (beresp.ttl <= 0s || | |
# beresp.http.Set-Cookie || | |
# beresp.http.Surrogate-control ~ "no-store" || | |
# (!beresp.http.Surrogate-Control && | |
# beresp.http.Cache-Control ~ "no-cache|no-store|private") || | |
# beresp.http.Vary == "*") { | |
# /* | |
# * Mark as "Hit-For-Pass" for the next 2 minutes | |
# */ | |
# set beresp.ttl = 120s; | |
# set beresp.uncacheable = true; | |
# | |
# } else { | |
# set beresp.grace = 1h; | |
#/* Remove Expires from backend, it's not long enough */ | |
# unset beresp.http.expires; | |
#/* Defina o TTL do client para este objeto */ | |
# # set beresp.http.cache-control = "max-age=900"; | |
#/* Tempo de retencao de um cache */ | |
# set beresp.ttl = 168h; | |
#/* Unset Apache sends a Server header such as Server: nginx and set other header */ | |
# unset beresp.http.Server; | |
# set beresp.http.Server = "nginx"; | |
# } | |
# return (deliver); | |
#} | |
# ESTUDO PARA CONCILIAR CACHE E MUDANCA DE IDIOMA | |
#sub vcl_backend_response { | |
# Regras de Bypass | |
# if (bereq.url ~ "^/admin") { | |
# return (deliver); | |
# } | |
# if (beresp.ttl <= 0s || | |
# beresp.http.Set-Cookie || | |
# beresp.http.Surrogate-control ~ "no-store" || | |
# (!beresp.http.Surrogate-Control && | |
# beresp.http.Cache-Control ~ "no-cache|no-store|private") || | |
# beresp.http.Vary == "*") { | |
# /* | |
# * Mark as "Hit-For-Pass" for the next 2 minutes | |
# */ | |
# set beresp.ttl = 120s; | |
# set beresp.uncacheable = true; | |
# } else | |
# if (bereq.url ~ "^/set_locale" && beresp.http.set-cookie){ | |
# set beresp.ttl = 120s; | |
# set beresp.uncacheable = true; | |
# set beresp.http.X-Burg = "CAI"; | |
# } | |
# set beresp.grace = 1h; | |
# unset beresp.http.expires; | |
# set beresp.http.cache-control = "max-age=900"; | |
# set beresp.ttl = 168h; | |
# unset beresp.http.Server; | |
# set beresp.http.Server = "nginx"; | |
# #} | |
# return (deliver); | |
#} | |
# The data on which the hashing will take place | |
sub vcl_hash { | |
hash_data(req.url); | |
if (req.http.host) { | |
hash_data(req.http.host); | |
} else { | |
hash_data(server.ip); | |
} | |
return (lookup); | |
} | |
sub vcl_deliver { | |
if (obj.hits > 0) { | |
set resp.http.X-Cache = "HIT"; | |
} else { | |
set resp.http.X-Cache = "MISS"; | |
} | |
# Configuracao de Redirect quando vem resposta do Servidor | |
if (resp.status == 302 && req.url ~ "^/set_locale/pt_BR") { | |
set resp.http.location = resp.reason; | |
set resp.reason = "Moved"; | |
set resp.http.X-Deliver = "HIT"; | |
# return (synth(301, "https://uol.com.br")); | |
# return (synth(301, "https://homolog.opac.scielo.org/set_locale/pt_BR")); | |
return(deliver); | |
} | |
if (resp.status == 302 && req.url ~ "^/set_locale/es") { | |
set resp.http.location = resp.reason; | |
set resp.reason = "Moved"; | |
set resp.http.X-Deliver = "HIT"; | |
# return (synth(301, "https://cnnespanol.cnn.com/")); | |
# return (synth(301, "https://homolog.opac.scielo.org/set_locale/es")); | |
return(deliver); | |
} | |
if (resp.status == 302 && req.url ~ "^/set_locale/en") { | |
set resp.http.location = resp.reason; | |
set resp.reason = "Moved"; | |
set resp.http.X-Deliver = "HIT"; | |
# return (synth(301, "http://edition.cnn.com/")); | |
# return (synth(301, "https://homolog.opac.scielo.org/set_locale/en")); | |
return(deliver); | |
} | |
# unset resp.http.X-Powered-By; | |
return (deliver); | |
} | |
sub vcl_synth { | |
if (resp.status == 301) { | |
set resp.http.location = resp.reason; | |
set resp.reason = "Moved"; | |
return (deliver); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment