本地用tomcat起了一个j2ee的应用,然后又起了一个nginx做反向代理。,nginx.conf:,使用了proxy_set_header来配置nginx转发的头部操作。,其中如下配置就是针对xff的:,
,其中$proxy_add_x_forwarded_for变量的值是当前包的x-forwarded-for变量和remote-addr变量,使用逗号隔开。,所以上面的命令就是把当前的包的x-forwarded-for的值设置为x-forwarded-for和remote-addr的连接。,这样这个包转发给下游时,下游就有了这台nginx服务器的ip地址。,当client第一次请求nginx服务器时,nginx拿到的x-forwarded-for为null,remote-addr就是client的实际地址,所以第一次的转发的xff值就只有client的ip地址,转发的nginx的地址是在remote-addr里。,下一台nginx服务器会把第一台nginx服务器的地址填入xff。,所以当一台服务器收到一个包时,上一台服务器的地址并不在xff里面,必须通过remote-addr拿到。,Controller:,本地ip为192.168.43.33。,然后我先使用了手机访问了nginx域名:192.168.43.33:50001/ly,显示:,这里192.168.43.1是手机的ip,127.0.0.1是nginx的ip。且通过x-real-ip可以获取到真实ip。,在使用一个crul命令:,显示:,这里客户端就是本机,所以会在xff后面添加一个127.0.0.1。也是符合预期的。,以上为个人经验,希望能给大家一个参考,也希望大家多多支持。