如何从nginx中的cookie中提取一些值

kee*_*kee 32 nginx

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

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

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

Day*_*ayo 45

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

请参阅Nginx文档

  • 只是为了节省某人的时间:此方法仅适用于包含字母数字字符和"_"的Cookie.如果您有一个名为user.id或user [id]的cookie(例如),您必须使用$ http_cookie和nginx地图函数http://nginx.org/en/docs/http/ngx_http_map_module.html#map (11认同)
  • @LuisClemente - 有没有机会知道你会怎么做?? (3认同)

小智 16

这是一个提取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/;
    }

  }

}
Run Code Online (Sandbox Code Playgroud)

  • 对于使用此答案的任何人,请注意andresbravog答案中的“ [^;]”。这很重要,因为此答案中的正则表达式仅在OAuth.AccessToken是最后一个/唯一的cookie时才起作用。 (2认同)

and*_*vog 12

如果有人在响应中使用前面的答案和几个不同的cookie,那么正确的正则表达式是:

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

或更一般的用法:

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