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