0

I am trying to use nginx to proxy to a secure download by setting an auth token as a cookie and then proxying with an additional header (<a href=""> doesn't let me set headers). I have found that the if directive is rewriting the url.

if ($http_cookie ~* "X-Auth-Token=(.+?)($|;)") {
}
proxy_pass http://127.0.0.1:5555/static;

When sending a GET request with /private/foo.ext it gets proxied to: /static/private/foo.ext.

If I comment out the if directive:

# if ($http_cookie ~* "X-Auth-Token=(.+?)($|;)") {
# }
proxy_pass http://127.0.0.1:5555/static;

When sending a GET request with /private/foo.ext it gets proxied to: /static/foo.ext.

The full code looks like this:

if ($http_cookie ~* "X-Auth-Token=(.+?)($|;)") {
    set $auth_token $1;
}
proxy_pass http://127.0.0.1:5555/static;
proxy_set_header X-Auth-Token $auth_token;
proxy_pass_request_header on;

But I commented out everything except the if directive and that seems to be what is changing the url.

Why is it adding /private in the url in one case and not the other? I want it to remove /private from the path.

Edit: nginx version is 1.6.0.

Brennan Cheung
  • 4,271
  • 4
  • 30
  • 29

1 Answers1

0

Per the above suggestion, I abandoned using if in favor of map. Here is the final result that is now working.

map $http_cookie $auth_token {
    "~.*?X-Auth-Token=(?<token>.*)(;|$)" $token;
}

location /private {
    proxy_set_header X-Auth-Token $auth_token;
    proxy_pass_request_headers on;
    proxy_pass http://127.0.0.1:5555/static;
}
Brennan Cheung
  • 4,271
  • 4
  • 30
  • 29