目前,我正在pipe理一个网站,用户有时会对新内容感到仓促,而且会严重刷新页面,导致服务器负载过高,最终导致崩溃。
我尽可能地对网站进行了优化,增加了服务器端caching,用户体验修改,提高服务器容量等等,但这还不够。
然后我发现ngx_http_limit_req_module正在做的工作很好。 但有一个问题:用户很可能从一个特定的地方浏览网站,这意味着一个相同的IP地址。 在这种情况下,即使是文明的浏览行为,也会触发限制率。
如果可能的话,我想特别指出每个用户,这样只有当一个用户刷新页面的时候才会触发请求率,而当很多使用相同IP的用户正常浏览时,不会触发请求率。
limit_req_zone指令的语法如下:
limit_req_zone key zone=name:size rate=rate;
我目前正在使用这样的东西:
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
模块文档还添加这些信息:
密钥可以包含文本,variables及其组合。 不包含具有空键值的请求。
和
在版本1.7.6之前,一个键可以包含一个variables。
我对Nginx几乎没有任何经验,但似乎可能有一些解决scheme。
因此,我的问题是:是否有一个variables比可能识别唯一的用户,即使他们共享相同的IP地址?
非常感谢您的帮助 !
我终于find了ngx_http_userid_module ,它允许Nginx使用cookie来识别用户。
configuration完这个模块后,我只需要像这样改变limit_req_zone指令:
limit_req_zone $uid_got zone=one:10m rate=1r/s;
注意:如果你的Nginx安装目前还没有这个模块,你需要用合适的参数重新编译它。 如果你不熟悉这个过程,这可能很困难。