当前位置:  开发笔记 > 编程语言 > 正文

如何在调用php之前在apache中设置REMOTE_ADDR

如何解决《如何在调用php之前在apache中设置REMOTE_ADDR》经验,为你挑选了2个好方法。

我有一个网站设置与nginx充当apache 2.2的反向代理,运行php.从apache和php的角度来看,所有请求的IP地址都是nginx服务器.我想php看到nginx看到的相同的远程IP.

Nginx设置标头X-Real-IP,其中包含nginx看到的远程IP.我尝试在apache conf中做这样的事情:

SetEnvIf ^X-Real-IP$ "(.+)" REMOTE_ADDR=$1

我希望我可以设置REMOTE_ADDR环境变量,当最终调用php时,它会看到nginx看到的远程IP.我认为php代码是这样做的:

$_SERVER['REMOTE_ADDR']

无论如何,这是行不通的.有任何想法吗?你能不在apache配置文件中设置REMOTE_ADDR?谢谢.



1> Pascal MARTI..:

不确定是否REMOTE_ADDR可以这样改变......


实际上,您可能需要安装/启用另一个Apache模块,如(引用):mod_rpaf

当满足两个条件时,它会更改其他Apache模块可见的客户端的远程地址.
第一个条件是远程客户端实际上是httpd.conf中定义的代理.
其次,如果有一个传入的X-Forwarded-For标头,并且代理在其已知代理列表中,它将从传入的X-Forwarded-For标头获取最后一个IP,并在请求结构中更改客户端的远程地址.
它还会接收传入的X-Host标头并相应地更新虚拟主机设置.
对于Apache2 mod_proxy,它采用X-Forwared-Host标头并更新虚拟主机

这是一篇关于它的博客文章:Nginx代理到Apache - 使用mod_praf访问远程主机IP地址

更新:原始链接现在不能正常工作,但也可以作为debian包使用: apt-get install libapache2-mod-rpaf



2> mileusna..:

我已经使用mod_remoteip for Apache解决了这个问题.mod_remoteip适用于Apache 2.5,但多亏了这个人,你也可以在Apache 2.2.x上使用它.

从https://gist.github.com/1042237下载mod_remoteip.c 并用它编译

apxs -i -a -c mod_remoteip.c

这应该在modules目录中创建mod_remoteip.so副本.apxs还会在httpd.conf中为新创建的模块添加LoadModule指令.

打开httpd.conf并检查mod_remoteip的LoadModule指令是否存在

LoadModule remoteip_module    modules/mod_remoteip.so

在httpd.conf中添加RemoteIPHeader指令

RemoteIPHeader X-Forwarded-For

该指令将指示mod_remoteip将来自nginx的X-Forwarded-For值用作remote_addr.您也可以使用X-Real-IP代替:

RemoteIPHeader X-Real-IP

重启Apache.如果你在nginx中设置了代理头,那么它将像魅力一样工作,Apache中的remote_addr将是正确的

# nginx conf    
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;


但是如果你使用mod_rewrite看起来有问题.重写的网址没有正确的remote_addr :(
推荐阅读
郑谊099_448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有