【问题标题】:php forward visitor ip to nginxphp 将访问者 ip 转发到 nginx
【发布时间】:2017-03-19 14:23:18
【问题描述】:

我正在尝试从 php 向 nginx 发送真实的访问者 ip

情况是这样的

服务器 A - exmaple.com/a.php

服务器 B - 示例/file.txt

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

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

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

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

        proxy_set_header X-Real-IP $remote_addr;

谢谢你

【问题讨论】:

  • 请添加您的尝试,以便我们进一步帮助您。
  • 添加了我的 php 文件

标签: php linux nginx ip forward


【解决方案1】:

服务器 A:将带有客户端 IP 的 X-Real-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;(不需要,因为默认值)

【讨论】:

  • 谢谢,$ch 可以换成别的吗?因为我无法将它添加到我的 perl 文件中
  • @Lolak Perl?你在哪里使用 Perl?
【解决方案2】:

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

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

您还需要使用 set_real_ip_from 配置指令来配置 Nginx 以接受这一点。

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

最好的选项只是让 Nginx 来做这件事。它比通过 PHP 传输所有这些数据要高效得多。使用proxy_pass

【讨论】:

  • 我有点困惑抱歉,nginx $remote_addr 正在给服务器一个 ip,我怎样才能让它给我访客 ip 地址
  • nvm 我想通了,我也落后于 cf 所以我也必须在那里添加 ips,谢谢帮助
  • 由于某种原因,当我使用视频网址添加此视频时,视频不可搜索任何想法? $opts['http']['header']="Range: ".$_SERVER['HTTP_RANGE']."\r\nCookie: video_key=".$_SERVER['HTTP_RANGE']; $opts['http']['header'] = 'X-Real-IP: ' 。 $_SERVER['REMOTE_ADDR'] 。 "\r\n";
  • 并非所有视频都可搜索。无论如何,不​​要在 PHP 中这样做......使用 Nginx。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
  • 2022-01-25
  • 2012-04-29
  • 1970-01-01
  • 2011-05-30
  • 2016-09-21
  • 1970-01-01
相关资源
最近更新 更多