Ema has submitted this change and it was merged. ( 
https://gerrit.wikimedia.org/r/365589 )

Change subject: Serve a synth error page when error body is empty in Varnish
......................................................................


Serve a synth error page when error body is empty in Varnish

Bug: T169683
Change-Id: Ifeab7bc8fd21e1d91935572a05efb0d00f8eab01
---
A modules/varnish/files/tests/text/14-custom-error.vtc
M modules/varnish/templates/vcl/wikimedia-backend.vcl.erb
M modules/varnish/templates/vcl/wikimedia-common.inc.vcl.erb
M modules/varnish/templates/vcl/wikimedia-frontend.vcl.erb
4 files changed, 40 insertions(+), 0 deletions(-)

Approvals:
  Ema: Verified; Looks good to me, approved



diff --git a/modules/varnish/files/tests/text/14-custom-error.vtc 
b/modules/varnish/files/tests/text/14-custom-error.vtc
new file mode 100644
index 0000000..d64bb2c
--- /dev/null
+++ b/modules/varnish/files/tests/text/14-custom-error.vtc
@@ -0,0 +1,21 @@
+varnishtest "Custom error when empty error body"
+
+server s1 {
+    rxreq
+    txresp -status 404 -body ""
+} -start
+
+varnish v1 -arg "-p cc_command='exec cc -fpic -shared -Wl,-x -L/usr/local/lib/ 
-o %o %s -lmaxminddb' -p vcc_allow_inline_c=true -p vcc_err_unref=false" 
-vcl+backend {
+    backend vtc_backend {
+        .host = "${s1_addr}"; .port = "${s1_port}";
+    }
+
+    include "/usr/share/varnish/tests/wikimedia_text-frontend.vcl";
+} -start
+
+client c1 {
+    txreq
+    rxresp
+    expect resp.status == 404
+    expect resp.bodylen > 0
+} -run
diff --git a/modules/varnish/templates/vcl/wikimedia-backend.vcl.erb 
b/modules/varnish/templates/vcl/wikimedia-backend.vcl.erb
index 31e7fd3..5f63062 100644
--- a/modules/varnish/templates/vcl/wikimedia-backend.vcl.erb
+++ b/modules/varnish/templates/vcl/wikimedia-backend.vcl.erb
@@ -182,6 +182,7 @@
 sub vcl_deliver {
        call wm_common_deliver_hitcount;
        call wm_common_xcache_deliver;
+       call wm_common_deliver_error_with_empty_body;
        call cluster_be_deliver;
        return (deliver); // no default VCL (which is just "return (deliver)" 
anyways)
 }
diff --git a/modules/varnish/templates/vcl/wikimedia-common.inc.vcl.erb 
b/modules/varnish/templates/vcl/wikimedia-common.inc.vcl.erb
index 014e85f..eb5c727 100644
--- a/modules/varnish/templates/vcl/wikimedia-common.inc.vcl.erb
+++ b/modules/varnish/templates/vcl/wikimedia-common.inc.vcl.erb
@@ -459,3 +459,20 @@
                }
        }
 }
+
+sub wm_common_deliver_error_with_empty_body {
+    // Provides custom error html if error response has no body
+    if (resp.http.Content-Length == "0" && resp.status >= 400) {
+        # Varnish doesn't define status codes from RFC6585
+        if (resp.status == 428) {
+            return(synth(resp.status, "Precondition Required"));
+        } elseif (resp.status == 429) {
+            return(synth(resp.status, "Too Many Requests"));
+        } elseif (resp.status == 431) {
+            return(synth(resp.status, "Request Header Fields Too Large"));
+        } elseif (resp.status == 511) {
+            return(synth(resp.status, "Network Authentication Required"));
+        }
+        return(synth(resp.status));
+    }
+}
diff --git a/modules/varnish/templates/vcl/wikimedia-frontend.vcl.erb 
b/modules/varnish/templates/vcl/wikimedia-frontend.vcl.erb
index 8864b7f..0e25406 100644
--- a/modules/varnish/templates/vcl/wikimedia-frontend.vcl.erb
+++ b/modules/varnish/templates/vcl/wikimedia-frontend.vcl.erb
@@ -413,6 +413,7 @@
 
 sub vcl_deliver {
        call wm_common_deliver_hitcount;
+       call wm_common_deliver_error_with_empty_body;
        call deliver_synth_;
        call cluster_fe_deliver;
        return (deliver); // no default VCL (which is just "return (deliver)" 
anyways)

-- 
To view, visit https://gerrit.wikimedia.org/r/365589
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: Ifeab7bc8fd21e1d91935572a05efb0d00f8eab01
Gerrit-PatchSet: 5
Gerrit-Project: operations/puppet
Gerrit-Branch: production
Gerrit-Owner: Gilles <gdu...@wikimedia.org>
Gerrit-Reviewer: BBlack <bbl...@wikimedia.org>
Gerrit-Reviewer: Ema <e...@wikimedia.org>
Gerrit-Reviewer: Filippo Giunchedi <fgiunch...@wikimedia.org>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to