Як отримати IP-адресу клієнта від AWS, Google Cloud LB і Cloudflare у Nginx?

Розгортання веб-застосунку у хмарному середовищі – це завжди захоплююче завдання, яке вимагає уваги до деталей.

Нещодавно я запустив свій інструмент techukraine.net Tools, який працює на платформі AWS за підтримки Cloudflare.

Для балансування навантаження я використовую AWS Application Load Balancer, а веб-сервером виступає Nginx. Після запуску, переглянувши access.log, я зауважив, що всі запити реєструються як такі, що надходять з внутрішніх IP-адрес (балансувальника навантаження).

Це створює проблему, якщо необхідно аналізувати журнали веб-сервера, враховуючи географічне розташування відвідувачів. Стало зрозуміло, що для коректного відстеження IP-адрес клієнтів потрібні зміни у конфігурації.

Ви зіткнулися з подібною ситуацією?

Далі я розповім, як налаштувати Nginx для отримання справжніх IP-адрес клієнтів у журналах доступу.

Отримання IP-адреси відвідувача через AWS або Google Cloud LB

  • Підключіться до вашого веб-сервера з Nginx.
  • Перейдіть у директорію встановлення Nginx (за замовчуванням: /etc/nginx).
  • Створіть резервну копію файлу nginx.conf.
  • Додайте наступні рядки всередину блоку http:
real_ip_header X-Forwarded-For;
set_real_ip_from 0.0.0.0/0;
  • Перезапустіть Nginx. Після цього ви побачите IP-адреси відвідувачів у access.log.

Якщо ваш вебсайт використовує Cloudflare, ви побачите їхні IP-адреси замість клієнтських. У такому випадку потрібно виконати додаткові налаштування, описані далі.

Отримання IP-адрес відвідувачів через Cloudflare

Cloudflare – це потужний CDN та сервіс безпеки, яким я активно користуюся. Якщо ви також використовуєте Cloudflare і хочете бачити справжні IP-адреси клієнтів у журналі веб-сервера, ось як це можна налаштувати.

Припустимо, що ви вже підключилися до вашого Nginx сервера.

Створіть резервну копію конфігураційного файлу вашого сайту (зазвичай це /etc/nginx/sites-available/yourdomain).

Додайте на початку файлу наступні рядки:

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;

Зверніть увагу: актуальний перелік IP-адрес Cloudflare можна знайти на їх офіційній сторінці.

Після перезапуску Nginx ви побачите реальні IP-адреси відвідувачів. Ця конфігурація допомогла мені, сподіваюся, вона буде корисною і вам.

Наступним кроком буде розгляд впровадження безпечних заголовків за допомогою Cloudflare Workers.

Чи сподобалася вам ця стаття? Поділіться нею з іншими!