flask配合nginx获取真实ip

request.remote_addr出现127.0.0.1的问题

Posted by TuoX on July 20, 2018

背景

今天在做api获取ip的事情,发现无论部署在线上,request.remote_addr拿到的总是127.0.0.1,这个是为什么呢,通过观察发现,服务器上面是通过nginx来做反向代理的,所以一直都是127.0.0.1。

所以要解决这个问题,可以进行nginx的配置,让nginx获取真实的ip,并且写入headers头部。

实现

1.nginx的配置

1).打开该站点的conf配置文件

2).在location /{}中加入以下配置:

   proxy_set_header Host $host:8080;

   proxy_set_header X-Real-IP $remote_addr;

   proxy_set_header REMOTE-HOST $remote_addr;

   proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

3).重启nginx

   nginx -t

   service nginx reload

4).修改flask中的代码

   from flask_restful import request # 我这里用的是flask_restful,所以从这边导入,如果是flask,那就变成 from flask import request

   headers = request.headers

   ip = headers['X-Real-Ip'] if 'X-Real-Ip' in headers else request.remote_addr

5).重启程序

   supervisorctl reload ***

结语

正好遇到这个问题,所以写个日志记录下来。