Hur får man klient-IP från AWS, Google Cloud LB och Cloudflare i Nginx?

Konfigurera Nginx för att registrera besökarens IP-adress i molnmiljöer

Det är alltid en givande upplevelse att distribuera en webbapplikation i molnet. Nyligen lanserade jag ett verktyg för adminvista.com Tools som körs på AWS, skyddat av Cloudflare.

Min installation använder AWS Application Load Balancer tillsammans med Nginx som webbserver. Efter att ha lanserat applikationen och granskat access.log, märkte jag att alla förfrågningar rapporterades som att de kom från lastbalanserarens interna IP-adress.

Detta är problematiskt om du vill analysera webbserverns loggar för att spåra besökarnas geografiska plats. Jag insåg att jag behövde göra några konfigurationsändringar för att korrekt registrera klientens IP-adress.

Står du inför samma utmaning?

I så fall, här är metoden för att få klientens IP-adress att visas i dina Nginx-åtkomstloggar.

Hämta besöks-IP från AWS eller Google Cloud Load Balancer

  • Logga in på din Nginx webbserver.
  • Navigera till installationskatalogen (standard är /etc/nginx).
  • Gör en säkerhetskopia av filen nginx.conf.
  • Lägg till följande kod under HTTP-blocket i nginx.conf:
real_ip_header X-Forwarded-For;
set_real_ip_from 0.0.0.0/0;
  • Starta om Nginx. Nu bör du se besökarnas IP-adress i din access.log-fil.

Om du använder Cloudflare ser du deras IP-adresser istället för klientens IP-adress. Därför behöver du göra ytterligare inställningar.

Få klientens IP från Cloudflare

Cloudflare är en fantastisk leverantör av CDN och säkerhetslösningar. Om du, som jag, använder Cloudflare och behöver visa besökarnas korrekta IP-adresser i webbserverns loggar, så här går du tillväga:

Förutsatt att du är inloggad på din Nginx-server:

Säkerhetskopiera din webbplats konfigurationsfil (vanligtvis finns den här: /etc/nginx/sites-available/dittdomännamn).

Lägg till följande i början av filen:

set_real_ip_from 103.21.244.0/22;
set_real_ip_from 103.22.200.0/22;
set_real_ip_from 103.31.4.0/22;
set_real_ip_from 104.16.0.0/13;
set_real_ip_from 104.24.0.0/14;
set_real_ip_from 108.162.192.0/18;
set_real_ip_from 131.0.72.0/22;
set_real_ip_from 141.101.64.0/18;
set_real_ip_from 162.158.0.0/15;
set_real_ip_from 172.64.0.0/13;
set_real_ip_from 173.245.48.0/20;
set_real_ip_from 188.114.96.0/20;
set_real_ip_from 190.93.240.0/20;
set_real_ip_from 197.234.240.0/22;
set_real_ip_from 198.41.128.0/17;
set_real_ip_from 199.27.128.0/21;
set_real_ip_from 2400:cb00::/32;
set_real_ip_from 2606:4700::/32;
set_real_ip_from 2803:f800::/32;
set_real_ip_from 2405:b500::/32;
set_real_ip_from 2405:8100::/32;
set_real_ip_from 2c0f:f248::/32;
set_real_ip_from 2a06:98c0::/29;
real_ip_header CF-Connecting-IP;

Obs: Det är rekommenderat att verifiera IP-adresslistan från Cloudflares officiella sida.

Starta om Nginx, och nu bör du se klientens IP-adress i loggarna. Denna lösning har varit till stor hjälp för mig, och jag hoppas den hjälper dig också.

Utforska sedan hur man implementerar säkra headers med Cloudflare Workers.

Tyckte du om den här artikeln? Dela den gärna med andra!