я пытаюсь отправить реальный ip посетителя на nginx от php
это ситуация
сервер A — exmaple.com/a.php
сервер B — пример / file.txt
при доступе к exmaple.com/a.php он загружает файл file.txt, расположенный на сервере b
но журналы nginx показывают, что сервер A ip запрашивает загрузку, я думаю, это правильно, потому что файл file.txt, загруженный через файл a.php, расположенный на сервере A
так как я могу отправить IP-адрес посетителя вместо сервера на Nginx
у меня уже есть это в моем конфиге nginx
proxy_set_header X-Real-IP $remote_addr;
благодарю вас
Вам необходимо добавить его в заголовки вашего запроса.
$opts['http']['header'] = 'X-Real-IP: ' . $_SERVER['REMOTE_ADDR'] . "\r\n";
Вам также необходимо настроить Nginx для принятия этого, с set_real_ip_from
директивы конфигурации.
Лучшим вариантом было бы использовать cURL (см. Ответ @ Terra), что дает вам немного больше гибкости, чем обертки fopen.
Лучший Однако, вариант просто позволить Nginx сделать это. Это гораздо эффективнее, чем передавать все эти данные через PHP. использование proxy_pass
,
Сервер A: добавить X-Real-IP
заголовок с IP-адресом клиента на исходящий запрос. Эта часть зависит от вашего кода. Например, если CURL, вам нужно добавить curl_setopt($ch, CURLOPT_HTTPHEADER, [ 'X-Real-IP: '.$_SERVER['REMOTE_ADDR'] ])
,
Сервер B: вам нужно настроить nginx. Добавить в nginx server
блок конфигурации:
set_real_ip_from SERVER_A_IP;
real_ip_header X-Real-IP;
(не требуется, поскольку значение по умолчанию)