在Apache FOR Django中访问HTTP_X_FORWARDED_FOR Header

在Apache FOR Django中访问HTTP_X_FORWARDED_FOR Header,django,apache,http-headers,ip-address,Django,Apache,Http Headers,Ip Address,我想在Django中读取客户端的IP地址。当我现在尝试使用HTTP_X_FORWARDED_作为标头时,它失败了。钥匙不在 显然,这与配置我的Apache服务器有关(我使用Apache和mod_wsgi进行部署)。我必须将其配置为反向代理?我如何做到这一点,是否存在安全隐患 谢谢, Brendan我对mod_wsgi不太熟悉,但客户机IP地址通常在REMOTE_ADDR环境变量中可用。 如果客户端通过代理访问网站,或者如果您的设置包含反向代理,则代理地址将改为位于REMOTE_ADDR变量中,并

我想在Django中读取客户端的IP地址。当我现在尝试使用HTTP_X_FORWARDED_作为标头时,它失败了。钥匙不在

显然,这与配置我的Apache服务器有关(我使用Apache和mod_wsgi进行部署)。我必须将其配置为反向代理?我如何做到这一点,是否存在安全隐患

谢谢,
Brendan

我对mod_wsgi不太熟悉,但客户机IP地址通常在REMOTE_ADDR环境变量中可用。 如果客户端通过代理访问网站,或者如果您的设置包含反向代理,则代理地址将改为位于REMOTE_ADDR变量中,并且代理可能会复制HTTP_X_FORWARDED_FOR中的原始客户端IP(取决于其配置)

如果您有一个请求对象,您可以访问以下环境变量:

request.environ.get('REMOTE_ADDR') request.environ.get('HTTP_X_FORWARDED_FOR') request.environ.get('REMOTE\u ADDR')) request.environ.get('HTTP\u X\u FORWARDED\u')
不需要仅仅为了获取客户端的IP地址而更改Apache配置或配置反向代理。

通常这些头在
request.META
中可用。因此,您可以尝试
request.META['HTTP\u X\u FORWARDED\u']


您是否也将Apache用作反向代理?我觉得这不对。通常使用一个较轻的静态服务器,比如nginx,作为运行应用服务器的Apache的反向代理。Nginx可以使用
proxy\u set\u header
config条目发送您喜欢的任何头。

您在哪里查找该头?嗨,Max,我尝试了该元键,但它抛出了一个错误。该标题不可用。我还查看了Firebug,但它没有显示。这取决于反向代理是否正确配置。您确定代理已正确设置以发送此标头吗?嗨,Max,我不知道如何配置反向代理,这是我的问题。另外,我正在使用Apache和mod_wsgi进行部署,为了记录在案,为什么还要使用反向代理?将请求代理到接收请求的同一服务器是没有意义的。你只是想得到IP吗?这就是request.META['REMOTE\u ADDR'],如果不是在代理后面的话。我没有使用反向代理。我的问题是,我应该使用反向代理吗。当我查找request.META['REMOTE\u ADDR']时,我一直得到127.0.0.1,这是本地主机。我通过django开发服务器在本地主机上运行它。我在网上进行了研究,发现了一些文章,其中指出REMOTE_ADDR不能与代理一起工作,因此您必须使用FORWARDED_。