【发布时间】:2014-11-25 12:41:49
【问题描述】:
我是 Nginx 的新手,希望能得到一些帮助。
我想从 nginx 中的浏览器 cookie 中提取某些数据(由我的 PHP 脚本设置的某些字段),以便我可以记录它。如果可能的话,我只想通过修改 nginx 配置来做到这一点。
任何指针/帮助将不胜感激。
【问题讨论】:
标签: nginx
我是 Nginx 的新手,希望能得到一些帮助。
我想从 nginx 中的浏览器 cookie 中提取某些数据(由我的 PHP 脚本设置的某些字段),以便我可以记录它。如果可能的话,我只想通过修改 nginx 配置来做到这一点。
任何指针/帮助将不胜感激。
【问题讨论】:
标签: nginx
您可以使用 $cookie_COOKIE_NAME_GOES_HERE 变量访问 cookie 值。
【讨论】:
这是一个提取 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/;
}
}
}
【讨论】:
[^;]。这很重要,因为此答案中的正则表达式仅在 OAuth.AccessToken 是最后一个/唯一的 cookie 时才有效。
如果有人在响应中使用带有多个不同 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";
}
【讨论】: