nginx速率限制与X-Forwarded-For头

我正在研究使用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的使用更容易。