Category Archives

14 Articles

nginx 批量配置同步

0   59933 转为繁体

在编译了lua-nginx-module的nginx上,可以方便地使用shared dict特性,在不reload配置文件的情况下实现配置同步。

由于shared dict使用一块共享内存,因此所有worker均可读写,也就不存在一致性的问题。

使用shared dict

Read More

nginx/openresty的一些记录

28   22739 转为繁体

日志

屏蔽user-agent并屏蔽日志

不屏蔽user-agent(允许其访问),但屏蔽日志

按uri屏蔽日志(可以和上面的按user-agent用同一个变量来同时过滤uri和user-agent)

 

Header

按mime type设置缓存时间

防攻击

简单的无状态cookie challenge(需要lua-nginx-module)

crawlers块中可以手动填写要屏蔽的IP

将其中的s改成随机字符串+时间戳可以变成有状态版本(需使用redis/memcached/shared memory存储生成的随机字符串)

将set-cookie改成通过js生成cookie可以变成javascript challenge,注意要在js里加上浏览器上下文判断,如var cookie=location.protocol?cookie:””; 或者DOM操作

这里有个更高级的输验证码的示例

其他

植入cookie

需要注意的是使用ngx.time()产生秒级的时间,用来做随机数种子可能会冲突,因此建议加上另外的随机变量(如下面的例子用的是客户端的ip) 可以使用ngx.now()产生毫秒精度时间

mongo好大一个坑

2   66935 转为繁体

因为种种原因被逼着写mongo……

作为一个初学者,我发现了几个坑:

新的协议没文档

官网上只有Legacy Driver Implementation Documentation这个旧的协议文档,新的文档的链接是一个死循环,绕一圈可以回到原地(不信你试试)。可能有用的只有一个视频,还是2011年的,不想看了,哦草。这里还有一个2013年的,从stackoverflow看来的

当然官方给的各种语言的SDK里倒是一直在更新的。

但是给个文档会死啊!

虽然是在用lua写,所以本来也是作死。

但是给个文档会死啊!

因为lua-resty-mongol没有支持新协议,所以会有这么个问题

在update里使用$pull,lua-resty-mongol用getLastError取被修改的行数,永远是返回1(这特么谁设计的),没办法知道改成功了没有。只能update前后各find一次比较了哈哈哈哈哈哈。

设计太坑爹

除了之前的getLastError永远返回1以外,还有一个问题:

之前是2.4.x版本,升级到3.x之后,告诉我admin库需要升级,否则没法登陆,而且需要用2.6.x版本来升级

呵呵

还有一个问题:

现在我有这么个文档post,每个记录是这样的:

首先(只)取所有评论的话是没有问题的↓:

现在我想取出_id是5下的前15条评论

这么写↑,post_content也出来了,post_content好大的啊,不想取怎么办啊

这么写↑,_id没了,其他post_content还在

↑并没有什么卵用


↑这样_id有,其他键没了。

所以结果是_id必须留着……

没错我是强迫症,强迫症多着呢

 

从目前的我所遇到的情况来看,似乎mongodb能干的奇妙功能用SQL数据库一样能搞,无非要再配合别的靠谱的nosql数据库(比如redis这种)。至少写了代码还能预测能发生什么。像mongo这样写着写着给你个惊♂喜的实在受不了了。哦不过也有可能被虐着虐着就有感♂觉了呢(ง •̀_•́)ง

 

PS : 我是mongo初学者,欢迎大神来鞭挞我

 

Memcached扩展的一些坑及强迫症专用PV统计的实现

0   34783 转为繁体

以下针对PHP的Memcached扩展

  • increment/decrement/touch方法必须使用binary protocol($_mc->setOption(Memcached::OPT_BINARY_PROTOCOL,true)),且连续执行两个请求必须先关闭之前的才可以
  • $expiry参数可以是UNIX 时间戳也可以是当前秒数,秒数大于30天会被认为是时间戳,要设置用不超时可以设为0
  • 启用binary protocol后increment/decrement的返回值可能类似1 15415 a2d1,←注意是类似这样的,没关系加个intval就行了
  • 看php.org文档的时候下面的用户留言比上面的有用得多

强迫症专用PV统计

强迫症认为PV统计漏掉一个IP就会浑身难受

在需要统计的页面的PHP中嵌入一下代码

每个ip一小时内访问相同页面只计一次;注意要先touch再increment,因为increment并不会增加超时时间,如果增加了还没被读就超时就杯具了;反之如果key不存在touch一下也不会怀孕;每当一个新用户访问,增加生命值10min

cron定时入库

 

注意这里不能用delete,因为delete可能会使数据丢失,但是decrement就没关系了