我有一个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-For , X-Real-IP等),包括$ binary_remote_addr变量。 所以,在请求限制配置中使用它是安全的。
Obs:另一方面,它将连接原始IP保存在$ realip_remote_addr上 。