URL不是root时,Nginx $ arg_name变量为空

时间:2019-06-04 13:03:48

标签: nginx

我正在尝试根据请求中可能存在的特定查询字符串为用户设置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指令,但是日志中的结果相同,这确认问题出在其他地方。我在这里想念什么?

0 个答案:

没有答案