使用正则表达式来截取nginx中的内置变量

nginx 中的内置变量都可以通过if指令 + 正则表达式来进行截取,截取之后的结果通过正则表达式的分组来进行引用

比如:从请求中传过来的一个名为 ssl_client_s_dn 的变量,它的值是类似cn=username这样的

我们想要只留下username ,可以这样:

1
2
3
if ( $ssl_client_s_dn ~ (CN=([\S\s]*)) ){
set $username $2;
}

其中 $2 是指获取正则表达式匹配结果的第二个分组(也就是第二个括号中的内容)

Read More

使用redis锁限制并发访问类

并发访问限制问题

对于一些需要限制同一个用户并发访问的场景,如果用户并发请求多次,而服务器处理没有加锁限制,用户则可以多次请求成功。

例如换领优惠券,如果用户同一时间并发提交换领码,在没有加锁限制的情况下,用户则可以使用同一个换领码同时兑换到多张优惠券。

Read More