我想在Django中读取客户端的IP地址。当我尝试使用HTTP_X_FORWARDED_FOR标头时,它会失败。关键不存在。
显然这与配置我的Apache服务器有关(我正在使用apache和mod_wsgi进行部署)。我必须将其配置为反向代理?我该怎么做,有安全隐患吗?
谢谢, 布伦丹
答案 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地址。