php forward visitor ip to nginx

时间:2016-11-06 00:48:59

标签: php linux nginx ip forward

我正在尝试将真正的访客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;

谢谢

2 个答案:

答案 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