获取服务器当前ip
发布日期:2021-05-08 14:12:46 浏览次数:21 分类:精选文章

本文共 1840 字,大约阅读时间需要 6 分钟。

nginx配置与IP获取逻辑优化

在实际应用中,获取用户的真实IP地址是一个常见的需求。以下是基于反向代理服务器(如nginx)配置的一些优化思路和实现方法。

一、反向代理配置

在nginx配置文件中,可以通过设置proxy_set_header指令来自定义IP信息。例如:

proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

这些设置可以帮助前端或后端逻辑更方便地获取用户的原始IP地址。

二、IP获取逻辑优化

在实际应用中,可能会遇到多级反向代理的情况,因此需要多种方式获取用户的真实IP地址。以下是一种常见的逻辑实现:

@RequestMapping("/queryIP")
@ResponseBody
public String queryIP(HttpServletRequest request) {
// 尝试从Nginx配置中获取IP
String ipAddress = request.getHeader("X-Real-IP");
if (ipAddress == null || ipAddress.isEmpty() || "unknown".equalsIgnoreCase(ipAddress)) {
ipAddress = request.getHeader("X-Forwarded-For");
}
if (ipAddress == null || ipAddress.isEmpty() || "unknown".equalsIgnoreCase(ipAddress)) {
ipAddress = request.getHeader("Proxy-Client-IP");
}
if (ipAddress == null || ipAddress.isEmpty() || "unknown".equalsIgnoreCase(ipAddress)) {
ipAddress = request.getRemoteAddr();
if (ipAddress.equals("127.0.0.1") || ipAddress.equals("0:0:0:0:0:0:0:1")) {
// 获取本机IP
InetAddress inet = null;
try {
inet = InetAddress.getLocalHost();
} catch (UnknownHostException e) {
e.printStackTrace();
}
if (inet != null) {
ipAddress = inet.getHostAddress();
}
}
}
// 处理多级反向代理情况
if (ipAddress != null && ipAddress.length() > 15) {
int commaIndex = ipAddress.indexOf(",");
if (commaIndex > 0) {
ipAddress = ipAddress.substring(0, commaIndex);
}
}
return ipAddress;
}

三、实现注意事项

  • Nginx配置优化:确保反向代理服务器正确配置,提供必要的IP头信息。
  • 多级反向代理处理:如果用户通过多个代理访问,IP地址可能包含多个值,按逗号分割取第一个IP。
  • 本地IP获取:如果前置代理无法获取真实IP,可以尝试获取本机IP。
  • 异常处理:考虑异常情况,避免空指针或未知值出现。
  • 通过以上方法,可以实现对用户真实IP地址的准确获取,并优化反向代理配置,提升应用的稳定性和可维护性。

    上一篇:关于毕业整理资源(部分,包含网路工程师视频)
    下一篇:ServerHttpSecurity设置pathMatchers.permitAll失效,仍然401.

    发表评论

    最新留言

    很好
    [***.229.124.182]2025年04月23日 20时39分16秒

    关于作者

        喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
    -- 愿君每日到此一游!

    推荐文章