Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Integralist/c08b1ab3e9dd508b1ccc5fe768d1a9b0 to your computer and use it in GitHub Desktop.
Save Integralist/c08b1ab3e9dd508b1ccc5fe768d1a9b0 to your computer and use it in GitHub Desktop.
[Fastly Clustering and Shielding Example] #fastly #varnish #vcl #clustering #shielding #cluster #shield

The below VCL snippets are expected to be run on https://fiddle.fastlydemo.net/

Note: they are copied verbatim from https://fiddle.fastlydemo.net/fiddle/72e0d619

vcl_recv

if (req.backend.is_shield)
{
  set req.http.shield = "This is on the Edge PoP (req.backend.is_shield)";
}
else {
  set req.http.shield = "This is on the shield PoP(!req.backend.is_shield)";
}
if(req.backend.is_cluster)
{
  set req.http.cluster = "this is in a clustering state (hit/miss-cluster)(req.backend.is_cluster)";
}
else {
 set req.http.cluster = "this is not in a clustering state (hit/miss-cluster)(!req.backend.is_cluster)";
}
if (!req.http.Fastly-FF) {
  set req.http.x-status = "edge node(!req.http.Fastly-FF)";
}
else {
  set req.http.x-status = "fetch/cluster node(req.http.Fastly-FF)";
}

if (req.http.Fastly-FF) {
  set req.http.x-otherstatus = "fetch/cluster node(req.http.Fastly-FF)";
}
else {
  set req.http.x-otherstatus = "edge node(!req.http.Fastly-FF)";
}

log req.http.shield;
log req.http.cluster;
log req.http.x-status;
log req.http.x-otherstatus;

vcl_hit

if (req.backend.is_shield)
{
  set req.http.shield = "This is on the Edge PoP (req.backend.is_shield)";
}
else {
  set req.http.shield = "This is on the shield PoP(!req.backend.is_shield)";
}
if(req.backend.is_cluster)
{
  set req.http.cluster = "this is in a clustering state (hit/miss-cluster)(req.backend.is_cluster)";
}
else {
 set req.http.cluster = "this is not in a clustering state (hit/miss-cluster)(!req.backend.is_cluster)";
}
if (!req.http.Fastly-FF) {
  set req.http.x-status = "edge node(!req.http.Fastly-FF)";
}
else {
  set req.http.x-status = "fetch/cluster node(req.http.Fastly-FF)";
}

if (req.http.Fastly-FF) {
  set req.http.x-otherstatus = "fetch/cluster node(req.http.Fastly-FF)";
}
else {
  set req.http.x-otherstatus = "edge node(!req.http.Fastly-FF)";
}

log req.http.shield;
log req.http.cluster;
log req.http.x-status;
log req.http.x-otherstatus;

vcl_miss

if(req.backend.is_origin){
  set req.http.origin = "I am fetching the origin's contents(req.backend.is_origin)";
}
else{
 set req.http.origin = "I am not fetching the origin's contents(!req.backend.is_origin)";
}

if (req.backend.is_shield)
{
  set req.http.shield = "This is on the Edge PoP (req.backend.is_shield)";
}
else {
  set req.http.shield = "This is on the shield PoP(!req.backend.is_shield)";
}
if(req.backend.is_cluster)
{
  set req.http.cluster = "this is in a clustering state (hit/miss-cluster)(req.backend.is_cluster)";
}
else {
 set req.http.cluster = "this is not in a clustering state (hit/miss-cluster)(!req.backend.is_cluster)";
}
if (!req.http.Fastly-FF) {
  set req.http.x-status = "edge node(!req.http.Fastly-FF)";
}
else {
  set req.http.x-status = "fetch/cluster node(req.http.Fastly-FF)";
}

if (req.http.Fastly-FF) {
  set req.http.x-otherstatus = "fetch/cluster node(req.http.Fastly-FF)";
}
else {
  set req.http.x-otherstatus = "edge node(!req.http.Fastly-FF)";
}

log req.http.shield;
log req.http.cluster;
log req.http.origin;
log req.http.x-status;
log req.http.x-otherstatus;

vcl_fetch

if (req.backend.is_shield)
{
  set req.http.shield = "This is on the Edge PoP (req.backend.is_shield)";
}
else {
  set req.http.shield = "This is on the shield PoP(!req.backend.is_shield)";
}
if(req.backend.is_cluster)
{
  set req.http.cluster = "this is in a clustering state (hit/miss-cluster)(req.backend.is_cluster)";
}
else {
 set req.http.cluster = "this is not in a clustering state (hit/miss-cluster)(!req.backend.is_cluster)";
}
if (!req.http.Fastly-FF) {
  set req.http.x-status = "edge node(!req.http.Fastly-FF)";
}
else {
  set req.http.x-status = "fetch/cluster node(req.http.Fastly-FF)";
}

if (req.http.Fastly-FF) {
  set req.http.x-otherstatus = "fetch/cluster node(req.http.Fastly-FF)";
}
else {
  set req.http.x-otherstatus = "edge node(!req.http.Fastly-FF)";
}

log req.http.shield;
log req.http.cluster;
log req.http.x-status;
log req.http.x-otherstatus;

vcl_deliver

if (req.backend.is_shield)
{
  set req.http.shield = "This is on the Edge PoP (req.backend.is_shield)";
}
else {
  set req.http.shield = "This is on the shield PoP(!req.backend.is_shield)";
}
if(req.backend.is_cluster)
{
  set req.http.cluster = "this is in a clustering state (hit/miss-cluster)(req.backend.is_cluster)";
}
else {
 set req.http.cluster = "this is not clustering(!req.backend.is_cluster)";
}
if (!req.http.Fastly-FF) {
  set req.http.x-status = "edge node(!req.http.Fastly-FF)";
}
else {
  set req.http.x-status = "fetch/cluster node(req.http.Fastly-FF)";
}

if (req.http.Fastly-FF) {
  set req.http.x-otherstatus = "fetch/cluster node(req.http.Fastly-FF)";
}
else {
  set req.http.x-otherstatus = "edge node(!req.http.Fastly-FF)";
}

log req.http.shield;
log req.http.cluster;
log req.http.x-status;
log req.http.x-otherstatus;

if (req.restarts == 0) {
  log "return(restart) once to see if edge nodes now show is_cluster:1";
  set req.url = "/status/201";
  set req.http.Fastly-Force-Shield = "1";
  return(restart);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment