服务端获取远程ip的方法

在业务系统中,通常需要获取用户的真实ip地址对用户进行分析,nginx配置需要有相关的配置才行

1、nginx配置
复制代码
#server模块配置
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
2、后端代码获取ip地址
复制代码
public class IPUtils {
    public static final String UNKNOW_IP = "unknown";

    /**
     * 获取IP地址
     *
     * @param request 请求
     * @return request发起客户端的IP地址
     */
    public static String getIP(HttpServletRequest request) {
        if (request == null)  return "0.0.0.0";
        String xip = request.getHeader("X-Real-IP");
        String xfor = request.getHeader("X-Forwarded-For");

        if (StrUtil.isNotEmpty(xfor) && !UNKNOW_IP.equalsIgnoreCase(xfor)) {
            //多次反向代理后会有多个ip值,第一个ip才是真实ip
            int index = xfor.indexOf(",");
            if (index != -1) {
                return xfor.substring(0, index);
            } else {
                return xfor;
            }
        }

        xfor = xip;
        if (StrUtil.isNotEmpty(xfor) && !UNKNOW_IP.equalsIgnoreCase(xfor)) {
            return xfor;
        }

        if (StrUtil.isBlank(xfor) || UNKNOW_IP.equalsIgnoreCase(xfor)) {
            xfor = request.getHeader("Proxy-Client-IP");
        }
        if (StrUtil.isBlank(xfor) || UNKNOW_IP.equalsIgnoreCase(xfor)) {
            xfor = request.getHeader("WL-Proxy-Client-IP");
        }
        if (StrUtil.isBlank(xfor) || UNKNOW_IP.equalsIgnoreCase(xfor)) {
            xfor = request.getHeader("HTTP_CLIENT_IP");
        }
        if (StrUtil.isBlank(xfor) || UNKNOW_IP.equalsIgnoreCase(xfor)) {
            xfor = request.getHeader("HTTP_X_FORWARDED_FOR");
        }
        if (StrUtil.isBlank(xfor) || UNKNOW_IP.equalsIgnoreCase(xfor)) {
            xfor = request.getRemoteAddr();
        }
        return xfor;
    }
}
相关推荐
WW、forever5 分钟前
【服务器R环境架构】基于 micromamba下载 R 库包
运维·服务器·r语言
在成都搬砖的鸭鸭22 分钟前
【Linux】network网络配置
linux·服务器·网络
程序员Xu24 分钟前
Vulkan学习笔记10—统一缓冲区
服务器·笔记·学习
Xの哲學26 分钟前
hostapd 驱动注册机制深度分析
linux·网络·算法·wireless
海海不掉头发27 分钟前
【2025 年】软件体系结构考试试卷-期末考试
java·服务器·软件体系结构
liulilittle41 分钟前
OPENPPP2 VMUX 技术探秘(高级指南)
网络·信息与通信·ip·通信·mux
广目软件44 分钟前
GM DC Monitor v2.0 卸载教程
服务器·网络·zabbix·prometheus
QC七哥1 小时前
wireshark过滤显示rtmp协议
网络·wireshark·rtmp
菠萝炒饭pineapple-boss2 小时前
Nginx-Ingress-Controller自定义端口实现TCP/UDP转发
tcp/ip·nginx·udp·ingress
qq_386322693 小时前
华为网路设备学习-25(路由器OSPF - 特性专题 二)
网络·学习·华为