php 转发访客ip到nginx

php forward visitor ip to nginx

我正在尝试从 php

将真实访客 ip 发送到 nginx

情况是这样

服务器 A - 例如。com/a.php

服务器 B - example/file.txt

当访问 exmaple.com/a.php 它下载 file.txt 位于服务器 b

但是 nginx 日志显示服务器 A 的 ip 作为请求的下载,我猜这是正确的原因 file.txt 通过位于服务器 A

上的 a.php 下载

那么如何将访问者的 ip 而不是服务器的 ip 发送到 nginx

我的 nginx 配置中已经有了这个

        proxy_set_header X-Real-IP $remote_addr;

谢谢你

Server A: 添加 X-Real-IP header 和客户端的 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;(不需要,因为默认值)

您需要将其添加到您的请求中 headers。

$opts['http']['header'] = 'X-Real-IP: ' . $_SERVER['REMOTE_ADDR'] . "\r\n";

您还需要使用 set_real_ip_from 配置指令配置 Nginx 以接受它。

更好的选择是使用 cURL(请参阅@Terra 的回答),它比 fopen 包装器更灵活。

best 选项只是让 Nginx 这样做。它比通过 PHP 传输所有这些数据要有效得多。使用 proxy_pass.