How to return a cookie to a client when auth_request is used?

Maxim Dounin mdounin at mdounin.ru
Thu Jan 15 13:16:11 UTC 2015


Hello!

On Thu, Jan 15, 2015 at 03:11:23AM -0500, nginxuser100 wrote:

> Hi, 
> 
> Question 1:
> 
> I would like to have an FastCGI authentication app assign a cookie to a
> client, and the Fast Auth app is called using auth_request. The steps are as
> follows:
> 
> 1. Client sends a request
> 2. NGINX auth_request forwards the request to a FastCGI app to
> authenticate.
> 3. The authentication FastCGI app creates a cookie, using "Set-Cookie:
> name=value". I would like this value to be returned to the client.
> 4. Assuming the authentication was successful, NGINX then forwards the
> request to an upstream FastCGI app which sends a response to the client. The
> HTTP header should contain Set-Cookie: name=value
> 
> How do I get NGINX to include the cookie in the header that gets forwarded
> to the upstream module so the final response to the client contains the
> cookie? I tried using auth_request_set but got 

You have to save the header value returned by the subrequest to a 
variable with auth_request_set, and then add the header to a 
response generated using the "add_header" directive.  Something 
like this should work:

    location / {
        auth_request /auth;
        auth_request_set $saved_set_cookie $upstream_http_set_cookie;
        add_header Set-Cookie $saved_set_cookie;
        ...
    }

[...]

> Question 2.    I also tried 
>        auth_request_set $http_cookie "test";  
>        to see how auth_request_set works. NGINX gave me this error at start
> time
> 
> nginx: [emerg] the duplicate "http_cookie" variable in
> /usr/local/nginx-1.7.9/conf/nginxWat.conf:25
> 
> Why did get such error?

The $http_* variables are headers of a request, and you can't 
redefine them.  Hence the error.

> Question 3. Can someone give me a pointer to a list of NGINX FastCGI
> supported env variables such as $http_cookie / HTTP_COOKIE?

All HTTP request headers are passed to FastCGI application as 
HTTP_* params, and will be available to an application as 
coresponding environment variables.  Additional params are passed 
as configured in your fastcgi_params file.

-- 
Maxim Dounin
http://nginx.org/



More information about the nginx mailing list