一、 环境信息
客户端 ---> F5 ---> nginx(反向代理) ---> 各业务模块 upstream
二 、 业务诉求
F5 透传客户端真实ip 给到 nginx, nginx日志能记录每次请求客户端的真实ip
三、 相关操作
3.1 F5 使用 7 层代理,替代之前的 4层代理
3.2 F5中开启AutoMap,并传递X-Forwarded-For值
方式1: 在http profile中开启X-Forwarded-For
image.png
方式2:在iRule中开启X-Forwarded-For
when HTTP_REQUEST {
HTTP::header insert "X-Forwarded-For" [IP::client_addr]
}
3.3 nginx 日志中增加 $http_x_forwarded_for 字段
$ cat nginx.conf
log_format main '$remote_addr###-###$remote_user###[$time_local]###"$request"###'
'$status###$body_bytes_sent###"$http_referer"###'
'"$http_user_agent"###$request_time###$http_host###$request_id###$upstream_addr###$upstream_status###$http_X_Request_Id###$scheme###$upstream_response_time###$http_x_real_ip###$request_length###$http_x_forwarded_for';
image.png
3.4 检查nginx配置文件语法并重载
nginx -t
nginx -s reload
3.5 查看日志客户端ip获取情况
$ tai -f access.log
192.168.1.110###-###-###[16/Jul/2023:22:10:49 +0800]###"POST /gateway/ticket/terminal/lappAccess HTTP/1.1"###200###476###"-"###"-"###0.021###www.example.com###a75538d7f4b34b42ea9a8b29bf0aa659###10.19.42.162:10086###200###c6145657-1167-4807-acaa-1a87aaecd2ae###http###0.021###-###1171###117.152.173.5
$remote_addr: 192.168.1.110,F5 ip
$http_x_forwarded_for: 117.152.173.5,客户端真实ip
四、参考
F5后端nginx+tomcat应用如何获得用户的真实ip
http://blog.chinaunix.net/uid-25723371-id-3393531.html
javaweb项目通过F5负载,获取客户端真实ip
https://blog.csdn.net/su1573/article/details/115730260
K4816: Using the X-Forwarded-For HTTP header to preserve the original client IP address for traffic translated by a SNAT object
https://my.f5.com/manage/s/article/K4816
网友评论