我正在尝试将真正的访客ip从php发送到nginx
这是情况
服务器A - exmaple.com/a.php
服务器B - example / file.txt
访问exmaple.com/a.php时,它会下载位于服务器b上的file.txt
但是nginx日志显示服务器A ip作为请求下载,我想正确的原因是通过位于服务器A上的a.php下载的file.txt
那么如何将访问者的ip而不是服务器的ip发送到nginx
我的nginx配置已经有了这个
proxy_set_header X-Real-IP $remote_addr;
谢谢
答案 0 :(得分:2)
服务器A:将X-Real-IP
标头与客户端的IP添加到传出请求。这部分取决于你的代码。例如,如果是CURL,则需要添加curl_setopt($ch, CURLOPT_HTTPHEADER, [ 'X-Real-IP: '.$_SERVER['REMOTE_ADDR'] ])
。
服务器B:您需要配置nginx。添加到nginx' s server
配置块:
set_real_ip_from SERVER_A_IP;
real_ip_header X-Real-IP;
(因为默认值而不是必需的)
答案 1 :(得分:1)
您需要将其添加到请求标头中。
$opts['http']['header'] = 'X-Real-IP: ' . $_SERVER['REMOTE_ADDR'] . "\r\n";
您还需要使用set_real_ip_from
配置指令配置Nginx以接受此操作。
更好的选择是使用cURL(参见@ Terra的回答),这比fopen包装器更灵活。
最佳选项只是让Nginx这样做。它比通过PHP管理所有这些数据更有效率。使用proxy_pass
。