Я не совсем уверен, как сформулировать этот вопрос настолько красноречиво, насколько это возможно, поэтому, пожалуйста, будьте со мной нежны.
В настоящее время у нас есть две виртуальные машины веб-сервера 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-адрес?






Для всех, кто столкнулся с этой проблемой, я решил ее, установив прокси Trust Cloudflare для Laravel https://github.com/monicahq/laravel-cloudflare с Github.
Он генерирует список IP-адресов Cloudflare, и когда IP-адреса Cloudflare обнаруживаются, они используются в качестве доверенных прокси. У него есть команда, запланированная в console.php, поэтому обязательно добавьте ее в свой cron.