Ce face set_real_ip_from și real_ip_header
În spatele unui load balancer, al lui Cloudflare sau al altui proxy, $remote_addr conține IP-ul proxy-ului, nu al vizitatorului. Jurnalele, limit_req, allow/deny și aplicația văd atunci același IP pentru toată lumea.
Modulul realip citește IP-ul real dintr-un antet (X-Forwarded-For, X-Real-IP, CF-Connecting-IP) și îl pune în $remote_addr. Antetul este crezut doar dacă cererea vine de la o adresă din set_real_ip_from; altfel oricine ar putea pretinde alt IP.
Cu real_ip_recursive on, Nginx parcurge lista din X-Forwarded-For de la dreapta la stânga și sare peste toate adresele de încredere, ca să ajungă la primul IP care nu este un proxy cunoscut. IP-ul original al conexiunii rămâne disponibil în $realip_remote_addr.
Parametri
| Parametru | Descriere |
|---|---|
Context |
http, server, location. |
set_real_ip_from |
Adresă sau rețea (CIDR) de încredere; se poate repeta. |
real_ip_header |
Implicit X-Real-IP. Antetul din care se citește IP-ul. |
real_ip_recursive |
Implicit off. on = sare peste toate adresele de încredere din X-Forwarded-For. |
Ce returnează
Nimic direct; $remote_addr și $binary_remote_addr primesc IP-ul real.
Exemple
Exemplul 1: Nginx în spatele unui load balancer din rețeaua internă
# în blocul http
set_real_ip_from 10.0.0.0/8;
real_ip_header X-Forwarded-For;
real_ip_recursive on;
Exemplul 2: Site în spatele Cloudflare
Lista de adrese Cloudflare se schimbă rar, dar se schimbă: actualizeaz-o periodic dintr-un script.
# fișier generat din https://www.cloudflare.com/ips-v4 și ips-v6
set_real_ip_from 173.245.48.0/20;
set_real_ip_from 103.21.244.0/22;
# ... restul rețelelor Cloudflare
set_real_ip_from 2400:cb00::/32;
real_ip_header CF-Connecting-IP;
Exemplul 3: Jurnalul înainte și după
Prima linie este înainte de configurare (IP-ul load balancer-ului), a doua după systemctl reload nginx (IP-ul vizitatorului).
tail -n 2 /var/log/nginx/access.log
Ieșire în terminal
10.0.3.17 - - [25/Oct/2026:11:02:41 +0200] "GET / HTTP/1.1" 200 5123 "-" "Mozilla/5.0"
86.120.14.7 - - [25/Oct/2026:11:03:05 +0200] "GET / HTTP/1.1" 200 5123 "-" "Mozilla/5.0"
Greșeli frecvente
- Pui
set_real_ip_from 0.0.0.0/0;ca să meargă „oricum”: orice client își poate alege IP-ul trimițând un antetX-Forwarded-Forfals și poate ocoliallow/denysau limitele. - Configurezi realip, dar modulul lipsește din Nginx-ul compilat de tine (
--with-http_realip_module):nginx -tdăunknown directive "set_real_ip_from".