场景:使用腾讯云负载均衡 CLB 的 HTTPS 监听器(七层)转发到后端两台 CVM,后端是 Nginx 加 Java 应用,应用里通过 request.getRemoteAddr() 记录访问来源。 现象: 1. 应用日志里的来源 IP 全部是 CLB 的内网地址段,看不到真实客户端 IP。 2. 业务有按 IP 限流和风控的需求,目前所有请求被当成同一个来源,限流误伤严重。 3. Nginx 的 access 日志里 $remote_addr 也是内网地址。 已尝试: 1. 在 Nginx 日志格式里加了 $http_x_forwarded_for,能看到值,但里面有时是一个 IP,有时是用逗号分隔的多个 IP。 2. 还没有配置 real_ip 相关指令,担心直接信任该头会被客户端伪造。 3. 另有一个四层 TCP 监听器转发到同一批后端,不确定它的行为是否不同。 想请教: 1. 七层监听器下,CLB 会通过哪个请求头把客户端 IP 传给后端?四层监听器是否会直接保留源 IP,两者在后端获取方式上有什么区别? 2. Nginx 里应如何用 set_real_ip_from 和 real_ip_header 配置,才能只信任 CLB 来源的头,避免客户端伪造 X-Forwarded-For? 3. X-Forwarded-For 出现多个 IP 时,应该取哪一个作为真实客户端 IP? 4. 如何在后端用 curl 自己带上伪造的头做验证,确认配置生效且不会被绕过?
相似问题