前言
对于一个请求,在经过多次转发后,后端可能需要获得发起请求的用户的ip,或者说整个请求链路的ip都需要,这个时候我们会用到 Proxy-Add-X-Forwarded-For两个请求头
正文
我们以 客户端 ----> nginx1 ---->nginx2 ----> 后端服务这种链路作为下文案例
仅需要用户真实ip
这个场景我们只需要在nginx1 去记录 $remote_addr ,也就是客户端ip,然后转发到后端就可以了
比如 我们在nginx1做如下配置
proxy_set_header X-Client-Addr $remote_addr;
然后nginx2 去获取X-Client-Addr请求头
proxy_set_header X-Client-Addr $http_x_client_addr;
最后后端服务获取X-Client-Addr请求头即可
需要获取整个链路的ip
这个场景就需要用到两个请求头 X-Forwarded-For & Proxy-Add-X-Forwarded-For
我们在nginx1中设置如下
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
我们在nginx2 中也做如下配置,和nginx1一样
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
最后后端去获取 X-Forwarded-For请求头即可
注意:X-Forwarded-For为自定义的名称,可以换的
小结
1、proxy_add_x_forwarded_for变量为nginx内置的,它会记录下来整个访问链路
2、X-Forwarded-For请求头名称可以换的
3、如果nginx2不需要之前的链路,可以不做proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 配置