[RFC] auth_request: Add auth_request_intercept_errors (on by default)

W. Trevor King wking at tremily.us
Sat Oct 25 16:27:39 UTC 2014


The patch successfully passes through error codes, but I haven't been
able to find a way to distinguish between auth-endpoint errors and
errors from the authorized endpoint.  For example, with:

  location = /auth {
    proxy_pass http://auth.example.com/;
    proxy_pass_request_body off;
    proxy_set_header Content-Length "";
    proxy_set_header X-Original-URI $request_uri;
    proxy_read_timeout 5s;
    proxy_intercept_errors on;
    error_page 504 =504 @504-auth;
  }

  location / {
    auth_request /auth;
    auth_request_intercept_errors off;
    proxy_pass http://api.example.com/;
  }

  location @504-auth {
    return 504 "auth timeout";
  }

I get the generic 504 error when either auth.example.com or
api.example.com times out.  I expect this is due to the auth_request
handler stripping the response body from the auth request, with a flow
like:

  1. Client requests /abc.
  2. Nginx matches location /, and creates a sub-request for /auth.
  3. Nginx matches location /auth, and sends a request to
     auth.example.com.
  4. auth.example.com times out, Nginx creates a default 504 response.
  5. The /auth error_page catches the 504 and adjusts the response
     body.
  6. Nginx exits the /auth location, returning the adjusted 504 to the
     auth_request handler.
  7. ngx_http_auth_request_handler strips the response body.
  8. Nginx notices that the 504 doesn't have a body, and attaches the
     default body.
  9. A 504 with the default body is returned to the client.

I'm still trying to work out what's actually going on so I can respond
with an auth-specific timeout message.  However, I thought I'd send
the current patch as is (since it works for folks who don't need an
auth-specific messages and just want to pass through the error codes).
Do folks besides me want this feature?  Can anyone give me hints on
auth-specific error messages?

Thanks,
Trevor

-- 
This email may be signed or encrypted with GnuPG (http://www.gnupg.org).
For more information, see http://en.wikipedia.org/wiki/Pretty_Good_Privacy
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: OpenPGP digital signature
URL: <http://mailman.nginx.org/pipermail/nginx-devel/attachments/20141025/10c5e333/attachment.bin>


More information about the nginx-devel mailing list