openresty写入用户唯一标识(cookie)

版权声明 本站原创文章 由 萌叔 发表 转载请注明 萌叔 | http://vearne.cc 1. 前言 最近打算在blog里面,增加个性化推荐,以增加访问量。这一切的前提是,我要能够标识出每个用户,以及记录用户的浏览记录。这里笔者采用openresty在cookie中写入用户标识,然后在日志中记录下用户的浏览记录,供后续分析使用 2. 详解 1)nginx 配置 upstream blog { server 127.0.0.1:8080; } server { listen 80; #端口 server_name blog.vearne.cc; location ^~ /archives/ { rewrite_by_lua_file 'conf/lua/set-ck.lua'; proxy_pass http://blog; } location /{ proxy_pass http://blog; } } 2)Lua脚本 set-ck.lua 如果用户没有对应的cookie "UT_ID", 则注入cookie的同时,返回一个302临时跳转, 客户再次访问时,由于已经拥有响应cookie,所以可以直接访问后端服务 local cookie_name = "cookie_UT_ID" local request_uri = ngx.var.request_uri if ngx.var[cookie_name] == nil then local uuid = io.open("/proc/sys/kernel/random/uuid", "r"):read() local mycookie = string.format("UT_ID=%s; Expires=%s", uuid, ngx.cookie_time(ngx.time() + 86400 * 1000)) ngx.header["Set-Cookie"] = mycookie ngx.header["Location"] = request_uri ngx.exit(302) end 这里另一个有趣的地方是,可以直接通过读取文件 "/proc/sys/kernel/random/uuid" 来生成一个uuid ...

November 5, 2018 · 1 min

程序hang住的问题的追踪

版权声明 本站原创文章 由 萌叔 发表 转载请注明 萌叔 | http://vearne.cc 引子: 我这里说的hang住,并不是指死锁,在真实的工作场景中,死锁的情况其实并不很多见。在我工作的几年中,有遇到好几次都是程序hang在某个IO请求上的。 1. 排查 排查hang住的最有用的命令是strace和lsof命令 比如我们有一个服务叫 atm-client 1.1 首先查出服务对应的进程 ps -ef| grep atm-client| grep -v grep 输出结果 root 5 1 0 2017 ? 01:05:39 atm-client 1.2 对于多线程的程序可以先列出进程的所有线程 ps -mp 5 -o THREAD,tid 输出结果 USER %CPU PRI SCNT WCHAN USER SYSTEM TID root 0.3 - - - - - - root 0.0 19 - poll_s - - 5 root 0.0 19 - sk_wai - - 11 root 0.0 19 - sk_wai - - 12 root 0.0 19 - sk_wai - - 13 root 0.0 19 - sk_wai - - 14 root 0.0 19 - sk_wai - - 15 root 0.0 19 - sk_wai - - 16 root 0.0 19 - sk_wai - - 17 root 0.0 19 - sk_wai - - 18 root 0.0 19 - sk_wai - - 19 root 0.0 19 - sk_wai - - 20 root 0.0 19 - sk_wai - - 21 1.3 strace 可以跟踪进程或者线程的系统调用 跟踪线程 ...

January 8, 2018 · 4 min