首页 > 解决方案 > 在 nginx 位置共享变量

问题描述

是否可以在位置指令之间共享变量?例如)

location / {
    set $myvar "XXX";
.
.
.
}

然后在位置 /app1 访问 $myvar

location /app1 {
    proxy_set_header $X-MY-HEADER $myvar; #currently this line not working
.
.
.
}

标签: nginxnginx-reverse-proxynginx-config

解决方案


您可以将访问令牌放入 cookie 中,以便用户浏览器将其与每个后续请求一起发送:

location / {
    ...
    add_header Set-Cookie "access-token=$upstream_http_x_auth_request_access_token; Path=/app1";
}

然后你可以access-tokes从你的 webapp 中检查 cookie 值,或者从 nginx 配置中的那个 cookie 值中设置你的自定义 HTTP 标头:

location /app1 {
    proxy_set_header X-My-Header $cookie_access_token;
    ...
}

请注意,access-token此示例中的 cookie 没有指定Max-Age值,因此它只会持续到最终用户关闭其浏览器。如果需要,还可以指定 cookie 过期时间,例如 24 小时:

add_header Set-Cookie "access-token=$upstream_http_x_auth_request_access_token; Path=/app1; Max-Age=86400";

推荐阅读