Wanted: suggestions on how to invert proxy_pass return codes

Jonathan Matthews contact at jpluscplusm.com
Mon Mar 4 23:58:07 UTC 2013


Hi all -

I have an odd requirement which I'm not quite able to solve - is there
anyone out there with a solution?

For reasons I won't go into, but which are unfortunately immovable and
quite real, I need to come up with a location stanza that exhibits the
following behaviour:

--------------------------------------------------------------------------
location /healthcheck/ {
  if (!-f /tmp/flag) {
    return 503;
  }
  proxy_intercept_errors on;
  proxy_pass http://backend.server.fqdn.local/status;
  error_page 200 = @backend_up;
  error_page 404 500 501 502 503 504 = @backend_down;
}
location @backend_up {
  return 503;
}
location backend_down {
  return 200;
}
--------------------------------------------------------------------------

Yes - you read that correctly :-(

Before making the proxy_pass call, check a marker on disk and serve a
(real, not translated to =200) 503 if it exists.
If I get a 200 from the backend status page, actually serve a 503.
If I get a 404/5xx from the backend status page, serve a 200.

I'm pretty sure the last time I tried something horrible like this,
error_page complained that it could only override response codes >400
- hence this email. Can anyone see a way of achieving the behaviour I
need?

The behaviour described is *all* that's important - no other part of
the config, above, is fixed. I can't introduce any more external
services unless there's absolutely no choice, however.

Thanks for having a think about this. I'll tell you what it's for if
you're able to help - I'm pretty sure you'll be both surprised and a
little bit proud that your idea got into this project, if you do ...
:-)

TIA all,
Jonathan
-- 
Jonathan Matthews // Oxford, London, UK
http://www.jpluscplusm.com/contact.html



More information about the nginx mailing list