If statement nginx if指令更改代理传递中的url
我正在尝试使用nginx代理安全下载,方法是将身份验证令牌设置为cookie,然后使用附加头进行代理(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
不允许我设置头)。我发现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相同。