Как получить удаленный IP-адрес посетителей за балансировщиком нагрузки и Cloudflare, а также сделать удаленный IP-адрес доступным для Apache

Я не совсем уверен, как сформулировать этот вопрос настолько красноречиво, насколько это возможно, поэтому, пожалуйста, будьте со мной нежны.

В настоящее время у нас есть две виртуальные машины веб-сервера Apache/Nginx/Plesk, которые находятся за балансировщиком сетевой нагрузки. Домен сайта на этих виртуальных машинах проксируется через Cloudflare.

Сайт создан на Laravel.

Прежде всего, Laravel не получал правильный удаленный IP-адрес посетителя, поэтому в app/Http/Middleware/TrustProxies.php было добавлено следующее. (Я знаю, что есть пакеты, которые можно использовать вместо этого, но сейчас используется именно этот)

protected $proxies = '*';

Тогда правильный IP-адрес был доступен.

Затем у нас возникла проблема: в журналах Apache удаленный IP-адрес указан как 10.7.224.225, который, как я полагаю, является внутренним IP-адресом балансировщика сетевой нагрузки (IONOS). Remoteip_module установлен, поэтому я добавил его ниже через Plesk в качестве дополнительных директив.

RemoteIPHeader CF-connecting-IP

Затем журналы Apache начинают заполняться правильным удаленным IP-адресом, однако Laravel перестает сообщать правильный IP-адрес и вместо этого записывает 10.7.224.225.

Это немного похоже на хождение по кругу. Кто-нибудь еще сталкивался с подобным? Что ты сделал?

Обновлять:

С момента публикации я стал изучать это больше. Я сбросил $_SERVER и вижу, что HEADER_X_FORWARDED_FOR содержит 2 IP-адреса, разделенных запятыми (для чего предназначен заголовок), и в этих случаях самый левый IP-адрес является правильным IP-адресом, а все остальные будут IP-адресами прокси. Laravel возвращает самый правый IP-адрес в качестве IP-адреса, а не самого левого. Кто-нибудь знает, почему и как вернуть правильный самый левый IP-адрес?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
0
0
185
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Для всех, кто столкнулся с этой проблемой, я решил ее, установив прокси Trust Cloudflare для Laravel https://github.com/monicahq/laravel-cloudflare с Github.

Он генерирует список IP-адресов Cloudflare, и когда IP-адреса Cloudflare обнаруживаются, они используются в качестве доверенных прокси. У него есть команда, запланированная в console.php, поэтому обязательно добавьте ее в свой cron.

Другие вопросы по теме