php x forwarded for,php – nginx可以处理重复的X-Forwarded-For标头...

TL; DR

> nginx:fastcgi_param HTTP_MERGED_X_FORWARDED_FOR $http_x_forwarded_for

> php:$_SERVER [‘HTTP_MERGED_X_FORWARDED_FOR’]

说明

您可以使用the $http_ variable访问所有http标头.使用此变量时,nginx甚至会为您执行标头合并

CustomHeader: foo

CustomHeader: bar

获取转换为值:

foo, bar

因此,您需要做的就是将此变量传递给php with fastcgi_param

fastcgi_param HTTP_MERGED_X_FORWARDED_FOR $http_x_forwarded_for

概念证明:

在你的nginx服务器块中:

location ~ \.php${

fastcgi_pass unix:run/php/php5.6-fpm.sock;

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

fastcgi_param HTTP_MERGED_X_FORWARDED_FOR $http_x_forwarded_for;

include fastcgi_params;

}

test.php的

die($_SERVER['HTTP_MERGED_X_FORWARDED_FOR']);

最后看看curl会发生什么:

curl -v -H 'X-Forwarded-For: 127.0.0.1' -H 'X-Forwarded-For: 8.8.8.8' http://localhost/test.php

给出以下回应:

* Trying 127.0.0.1...

* Connected to localhost (127.0.0.1) port 80 (#0)

> GET /test.php HTTP/1.1

> Host: localhost

> User-Agent: curl/7.47.0

> X-Forwarded-For: 127.0.0.1

> X-Forwarded-For: 8.8.8.8

>

< HTTP/1.1 200 OK

< Server: nginx/1.10.3 (Ubuntu)

< Date: Wed, 01 Nov 2017 09:07:51 GMT

< Content-Type: text/html; charset=UTF-8

< Transfer-Encoding: chunked

< Connection: keep-alive

<

* Connection #0 to host localhost left intact

127.0.0.1, 8.8.8.8

繁荣!在那里,您可以访问所有X-FORWARDED-FOR标头,作为$_SERVER中的逗号分隔字符串[‘HTTP_MERGED_X_FORWARDED_FOR’]

当然,您可以使用您想要的任何名称,而不仅仅是HTTP_MERGED_X_FORWARDED_FOR.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值