在Apache中为Django访问HTTP_X_FORWARDED_FOR标头

时间:2011-04-28 15:12:01

标签: django apache http-headers ip-address

我想在Django中读取客户端的IP地址。当我尝试使用HTTP_X_FORWARDED_FOR标头时,它会失败。关键不存在。

显然这与配置我的Apache服务器有关(我正在使用apache和mod_wsgi进行部署)。我必须将其配置为反向代理?我该怎么做,有安全隐患吗?

谢谢, 布伦丹

2 个答案:

答案 0 :(得分:1)

通常这些标头在request.META中可用。所以你可以试试request.META['HTTP_X_FORWARDED_FOR']

您是否也使用Apache作为反向代理?这对我来说似乎不对。通常使用像nginx这样较轻的静态服务器作为运行应用服务器的Apache的反向代理。 Nginx可以使用proxy_set_header配置条目发送您喜欢的任何标头。

答案 1 :(得分:0)

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

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

request.environ.get('REMOTE_ADDR')
request.environ.get('HTTP_X_FORWARDED_FOR')

不需要更改Apache配置或配置反向代理只是为了获取客户端的IP地址。