J'examine la limitation de débit en utilisant HttpLimitReqModule de nginx . Cependant, les demandes proviennent toutes de la même IP (un équilibreur de charge), avec la véritable adresse IP dans les en-têtes.
Existe-t-il un moyen d'avoir nginx rate-limit basé sur l'ip dans l'en- X-Forwarded-For
tête au lieu de l'ip de la source?
la source
$binary_remote_addr
variable est définie correctement.La
limit_req_zone
directive définit la variable à utiliser comme clé pour le regroupement des demandes.Habituellement, le
$binary_remote_addr
est utilisé plutôt que$remote_addr
parce qu'il est plus petit et économise de l'espace.Vous souhaitez peut-être également utiliser le RealipModule .
Cela réécrira les variables d'adresse distante à l'adresse fournie dans un en-tête personnalisé et facilitera également la journalisation et l'utilisation d'autres variables.
la source
$binary_remote_addr
et$remote_addr
sont définis sur la valeur de votre en-tête configuré, généralementX-Forwarded-For
- de sorte que vos variables standard sont désormais la «véritable adresse IP du client». Exécuteznginx -V
pour voir si NGINX a été construit avec--with-http_realip
. La configuration est alors aussi simple queset_real_ip_from 10.0.0.0/8;
real_ip_header X-Forwarded-For;
:, où la plage CIDR est celle de votre équilibreur de charge en amont qui définit l'en-X-Forwarder-For
tête.