Nginx 1.6.2 limit_req_zone:是否有一个可以识别唯一用户的键?

Nginx 1.6.2 limit_req_zone:是否有一个可以识别唯一用户的键?

我目前正在管理一个网站,该网站的用户有时会非常急于获取新内容,并频繁刷新页面,导致服务器负载过高并最终崩溃。

我尽可能地优化了网站,添加了服务器端缓存、修改了用户体验、提高了服务器容量等……但这还不够。

后来我发现 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;

模块文档还添加这些信息:

键可以包含文本、变量及其组合。键值为空的请求不予处理。

在 1.7.6 版本之前,一个键只能包含一个变量。

我对 Nginx 几乎没有经验,但似乎可以找到一些解决方案。

因此我的问题是:是否存在一个变量可以识别唯一的用户,即使他们共享相同的 IP 地址?

非常感谢您的帮助 !

答案1

我终于找到了 ngx_http_userid_module这允许 Nginx 使用 cookie 识别用户。

配置此模块后,我只需要像这样更改 limit_req_zone 指令:

limit_req_zone $uid_got zone=one:10m rate=1r/s;

注意:如果您的 Nginx 安装中尚未包含此模块,则需要使用适当的参数重新编译它。如果您不熟悉此过程,这可能会很困难。

相关内容