👻 通过nginx代理的后端,获取客户端的真实ip地址

对于flask框架要获取请求客户端的ip地址,可以通过如下代码实现:

from flask import request
# 获取客户端的ip地址
request.remote_addr

然而,如果后端采用nginx代理后(不采用flask内置的wsgi服务器,性能差),上述代码却不能获取到客户端的真实ip地址,往往获取的ip地址固定的为127.0.0.1 ,如何才能获取真实的ip地址,可以通过以下两步实现。

  1. 在 nginx的配置中添加以下自定义请求头
proxy_set_header    X-Client_Real_Ip  $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;

二选一就行, X-Client_Real_Ip 可以修改成自己的喜欢名字,$remote_addr 为固定值,不可修改。

  1. 在flask后端可以通过以下代码实现获取客户端的真实ip地址
def get_login_real_ip():
    '''获取用户登录的地址'''
    from flask import request
    if request.headers.get('X-Forwarded-For'):
        ip_address = request.headers.get('X-Forwarded-For')
    elif request.headers.get('X-Client_Real_Ip'):
        ip_address = request.headers.get('X-Client_Real_Ip')
    else:
        ip_address = request.remote_addr
    print(f'login ip_address={ip_address}')
    return ip_address

so easy 🎉🎉🎉

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容