Nginx的速率限制和真正的IP模块

我有一个CDN +负载均衡器设置后面的Nginx服务器池。 CDNcachingHTTP“读取”请求(GET,HEAD,OPTIONS)并绕过“写入”请求(POST)。

我正在使用real_ip模块从X-FORWARD-FOR头获取客户端的IP地址,如下所示:

set_real_ip_from <trusted_cidr1> set_real_ip_from <trusted_cidr2> ... real_ip_recursive on; real_ip_header X-Forwarded-For; 

它可以确认它的工作。 但是,我也想限制每个客户端的请求率(我会假设每个IP都是一个不同的客户端),为了避免机器人和攻击,所以我使用的是limit_req模块,如下所示:

 http { limit_req_zone $binary_remote_addr zone=perip:10m rate=10r/s; location / { limit_req zone=perip burst=5; } } 

所以,我的问题是:将$ binary_remote_addr假设原来的客户端的IP,请求的真正的鼻祖,一旦我configuration了real_ip ,或内部Nginx不会覆盖,因为我期待? 因为如果没有,这样的configuration肯定会导致我严重的问题。

我想Nginx对于这一点已经足够聪明了,但是一旦我在文档上找不到确认,并且没有机会在真实的分布式场景中进行testing,我希望以前有经验的人可以这样做告诉我。

谢谢。

目前还没有答案,所以我正在做。

我自己进行了验证 – real_ip模块在内部更改了连接源的值,为了所有的意图和目的,与连接源相关的所有东西都变成了IP(从X-Forward-ForX-Real-IP等),包括$ binary_remote_addr变量。 所以,在请求限制配置中使用它是安全的。

Obs:另一方面,它将连接原始IP保存在$ realip_remote_addr上