How to redirect only if/after a FAILED basic authentication?

jen142 at promessage.com jen142 at promessage.com
Sun Sep 22 21:14:55 UTC 2013


I'm setting up an auth-before-proxy_pass config.

The following works now:

	location / {
		root /dev/null;
		auth_basic "Restricted Remote";
		auth_basic_user_file
		/data/etc/security/auth/passwd.basic;
		proxy_pass        https://mail-secure;
		proxy_set_header  Host $host:12345;
		proxy_set_header  X-Real-IP $remote_addr;
		proxy_set_header  X-Forwarded-For
		$proxy_add_x_forwarded_for;
	}

Now, if a visitor:

	(1) enters bad (or no) crendentials
	(2) clicks "Cancel" on the BASIC auth dialog box

the site displays a

	"401 Authorization Required"

page.

Instead, I want to add a rewrite on failed authorization.

If I try:

	location / {
		root /dev/null;
		auth_basic "Restricted Remote";
		auth_basic_user_file
		/data/etc/security/auth/passwd.basic;
+               error_page 401 = @redirect;
		proxy_pass        https://mail-secure;
		proxy_set_header  Host $host:12345;
		proxy_set_header  X-Real-IP $remote_addr;
		proxy_set_header  X-Forwarded-For
		$proxy_add_x_forwarded_for;
	}

+       location @redirect {
+               rewrite ^(.*)$ http://someothersite.com permanent;
+       }

I get the redirect on EVERY visit -- never even getting the chance to
enter credentials; i.e., the rewrite happens apparently BEFORE the auth
step.

I think this may be because:

	@
	http://en.wikipedia.org/wiki/List_of_HTTP_status_codes#4xx_Client_Error

		401 UnauthorizedSimilar to 403 Forbidden, but
		specifically for use when authentication is required and
		has failed or **HAS NOT YET BEEN PROVIDED**.[2] The
		response must include a WWW-Authenticate header field
		containing a challenge applicable to the requested
		resource. See Basic access authentication and Digest
		access authentication.

and that I may have do the @redirect only if some header says "failed".

How do I redirect ONLY if there's been a failed AUTH?



More information about the nginx mailing list