If statement nginx if指令更改代理传递中的url

If statement nginx if指令更改代理传递中的url,if-statement,nginx,proxy,rewrite,proxypass,If Statement,Nginx,Proxy,Rewrite,Proxypass,我正在尝试使用nginx代理安全下载,方法是将身份验证令牌设置为cookie,然后使用附加头进行代理(不允许我设置头)。我发现if指令正在重写url if ($http_cookie ~* "X-Auth-Token=(.+?)($|;)") { } proxy_pass http://127.0.0.1:5555/static; 当使用/private/foo.ext发送GET请求时,它会被代理到:/static/private/foo.ext 如果我注释掉If指令: # if ($http

我正在尝试使用nginx代理安全下载,方法是将身份验证令牌设置为cookie,然后使用附加头进行代理(
不允许我设置头)。我发现
if
指令正在重写url

if ($http_cookie ~* "X-Auth-Token=(.+?)($|;)") {
}
proxy_pass http://127.0.0.1:5555/static;
当使用
/private/foo.ext
发送
GET
请求时,它会被代理到:
/static/private/foo.ext

如果我注释掉
If
指令:

# if ($http_cookie ~* "X-Auth-Token=(.+?)($|;)") {
# }
proxy_pass http://127.0.0.1:5555/static;
使用
/private/foo.ext
发送
GET
请求时,它会被代理到:
/static/foo.ext

完整代码如下所示:

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;
但是我注释掉了除了
if
指令之外的所有内容,这似乎就是改变url的原因

if ($http_cookie ~* "X-Auth-Token=(.+?)($|;)") {
}
proxy_pass http://127.0.0.1:5555/static;
为什么在一种情况下在url中添加
/private
,而在另一种情况下不添加?我希望它从路径中删除
/private


编辑:nginx版本是1.6.0。

根据上述建议,我放弃了使用
if
,转而使用
map
。这是目前正在发挥作用的最终结果

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;
}
map$http\u cookie$auth\u令牌{
“~.*X-Auth-Token=(?*)(;|$)”$Token;
}
地点/私人{
代理集标题X-Auth-Token$Auth\u Token;
代理\u传递\u请求\u头打开;
代理通行证http://127.0.0.1:5555/static;
}

如果
是邪恶的。使用
map
可能您只需要使用
$cookie\u x\u auth\u token
变量而不使用map。似乎$cookie\u name语法不支持变量名称中的破折号。它不能识别X-Auth-Token和X_-Auth_-Token相同。