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 000..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
Gerrit-Reviewer: BBlack
Gerrit-Reviewer: Ema
Gerrit-Reviewer: Filippo Giunchedi
Gerrit-Reviewer: jenkins-bot <>
___
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits