Django获取用户IP地址

前言

经过反向代理后,由于在客户端和Web服务器之间增加了中间层,因此Web服务器无法直接拿到客户端的IP。
由于使用反向代理的缘故,Django中HttpRequest.META[‘REMOTE_ADDR’]是得到localhost的地址。

X-Forwarded-For变量,这是一个squid开发的,用于识别通过HTTP代理或负载平衡器原始IP一个连接到Web服务器的客户机地址的非rfc标准,如果有做X-Forwarded-For设置的话,每次经过proxy转发都会有记录,格式就是client1, proxy1, proxy2,以逗号隔开各个地址,由于他是非rfc标准,所以默认是没有的,需要强制添加,在默认情况下经过proxy转发的请求,在后端看来远程地址都是proxy端的ip 。

步骤

在Nginx配置文件中的server里加入

1
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

然后再Django中访问HttpRequest的META[‘HTTP_X_FORWARDED_FOR’]就可以得到正确的IP地址。

文章目录
  1. 1. 前言
  2. 2. 步骤
|