【问题标题】:How to extract some value from cookie in nginx如何从 nginx 中的 cookie 中提取一些值
【发布时间】:2014-11-25 12:41:49
【问题描述】:

我是 Nginx 的新手,希望能得到一些帮助。

我想从 nginx 中的浏览器 cookie 中提取某些数据(由我的 PHP 脚本设置的某些字段),以便我可以记录它。如果可能的话,我只想通过修改 nginx 配置来做到这一点。

任何指针/帮助将不胜感激。

【问题讨论】:

标签: nginx


【解决方案1】:

您可以使用 $cookie_COOKIE_NAME_GOES_HERE 变量访问 cookie 值。

Nginx Documentation

【讨论】:

  • 只是为了节省时间:此方法仅适用于带有字母数字字符和“_”的 cookie。如果您有一个名为 user.id 或 user[id] 的 cookie(例如),您必须将 $http_cookie 与 nginx 映射函数 nginx.org/en/docs/http/ngx_http_map_module.html#map 一起使用
  • @LuisClemente - 有没有机会知道你将如何做到这一点??
【解决方案2】:

这是一个提取 HttpOnly cookie 并将其作为 OAuth Bearer 令牌传递给 RESTful api 的示例:

http {

  map $http_cookie $auth_header {
    default "";
    "~*OAuth.AccessToken=(?<token>.+)" "Bearer $token";
  }

  server {
    listen                443 ssl;

    ssl_certificate       /etc/nginx/certs/nginx.crt;
    ssl_certificate_key   /etc/nginx/certs/nginx.key;

    proxy_set_header      Authorization $auth_header;

    location / {
      proxy_pass          https://rest-api-host.domain.com/;
    }

  }

}

【讨论】:

  • 对于使用此答案的任何人,请注意 andresbravog 的答案中的 [^;]。这很重要,因为此答案中的正则表达式仅在 OAuth.AccessToken 是最后一个/唯一的 cookie 时才有效。
【解决方案3】:

如果有人在响应中使用带有多个不同 cookie 的上一个答案,则正确的正则表达式是:

map $http_cookie $auth_header {
    default "";
    "~*OAuth.AccessToken=(?<token>[^;]+)" "Bearer $token";
  }

或更一般的用法:

map $http_cookie $auth_header {
    default "";
    "~*yourCookieName=(?<variable>[^;]+)" "the value you wanna set $variable";
  }

【讨论】:

    猜你喜欢
    • 2020-09-27
    • 1970-01-01
    • 2021-12-11
    • 2015-11-25
    • 2013-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多