我正在尝试根据请求中可能存在的特定查询字符串为用户设置Cookie。
我能够设置一个map
块,以便如果存在这样的参数,它将生成cookie值,然后将其与add_header
指令一起使用。但是,我意识到Set-cookie
标头没有在404上发送。我添加了/test
路由,该路由返回200响应,但仍然没有Set-Cookie标头的迹象。
然后,我创建了一种日志格式,仅包含$ arg_name变量,这是在我发现仅在URL与根匹配时才填充变量的情况。这是我正在处理的示例。我正在使用 Nginx 1.15.7 。
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '"$arg_foo"';
access_log /var/log/nginx/access.log main;
map $arg_foo $foo_cookie {
"~*[a-z0-9\-\_]" "foo=$arg_foo; Domain=$host; Max-Age=14400; httponly";
}
server {
listen 80;
server_name localhost;
add_header Set-Cookie $foo_cookie;
root /usr/share/nginx/html;
location /test {
try_files $uri $uri/ /index.html;
}
location / {
index index.html index.htm;
}
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
}
}
当请求为localhost:80/?foo=bar
时,日志显示"bar"
,并且发送Set-Cookie
标头。
当请求为localhost:80/test?foo=bar
时,日志显示"-"
,这意味着变量为空,结果Set-Cookie
头被未发送!
我什至删除了map
语句和add_header
指令,但是日志中的结果相同,这确认问题出在其他地方。我在这里想念什么?