我正在研究使用nginx的HttpLimitReqModule进行速率限制。 但是,所有请求都来自同一个IP(一个负载均衡器),并在头部有真实的IP地址。
有没有办法让Nginx的速度限制基于在X-Forwarded-For
头的IP而不是源的IP?
是的,典型的速率限制configuration定义string如下所示:
limit_req_zone $binary_remote_addr zone=zone:16m rate=1r/s;
其中$ binary_remote_addr是限制器的唯一键。 您应该尝试将其更改为$ http_x_forwarded_for获取X-Forwarded-For标头值的variables。 虽然这会增加内存消耗,因为$ binary_remote_addr使用压缩的二进制格式存储IP地址,而$ http_x_forwarded_for则不使用。
limit_req_zone $http_x_forwarded_for zone=zone:16m rate=1r/s;
limit_req_zone
指令定义要用作请求分组的关键字的variables。
通常,使用$binary_remote_addr
而不是$remote_addr
因为它比较小,节省空间。
也许你也可以使用RealipModule 。
这会将远程地址variables重写为自定义标题中提供的地址,并且还会使日志logging和其他variables的使用更容易。