nginx获取真实的ip的方法

 更新时间:2023年08月15日 15:59:13   作者:广铁小多多  
在实际应用中,我们可能需要获取用户的ip地址,比如做异地登陆的判断等等,本文主要介绍了nginx获取真实的ip的方法,具有一定的参考价值,感兴趣的可以了解一下

我这里使用是springboot项目,使用nginx做代理,但header里面的参数没有将ip带过来,所有需要配置nginx将ip带过来。

nginx.conf文件

server {
    listen       80;
    listen       443 ssl;
    server_name  xxx.xxx.com;
    ssl_certificate  /web/project/ai-master/ssl/xxx.xxx.com_bundle.pem;
    ssl_certificate_key  /web/project/ai-master/ssl/xxx.xxx.com.top.key;
    #接口
    location /api {
        #保留代理之前的host 包含客户端真实的域名和端口号
        proxy_set_header    Host  $host;
        #保留代理之前的真实客户端ip
        proxy_set_header    X-Real-IP  $remote_addr;
        #这个Header和X-Real-IP类似,但它在多级代理时会包含真实客户端及中间每个代理服务器的IP
        proxy_set_header    X-Forwarded-For  $proxy_add_x_forwarded_for;
        #表示客户端真实的协议(http还是https)
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_pass http://aiMasterServer/api;
    }
}

RequestUtil.java文件

/**
 * @Description:请求处理类
 * @author: Adobe Chow
 * @date: 2019/4/25 10:42
 * @Copyright: www.winshang.com Inc. All rights reserved.
 */
public class RequestUtil {
    public static HttpServletRequest getRequest(){
        HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();
        return request;
    }
    public static HttpServletResponse getResponse(){
        HttpServletResponse response = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getResponse();
        return response;
    }
    /***
     * 获取客户端IP地址;这里通过了Nginx获取;X-Real-IP,
     * @return
     */
    public static String getClientIP() {
        HttpServletRequest request = getRequest();
        String ip = request.getHeader("X-Real-IP");
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("X-Forwarded-For");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("Proxy-Client-IP");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("WL-Proxy-Client-IP");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getRemoteAddr();
        }
        return ip;
    }
}

到此这篇关于nginx获取真实的ip的方法的文章就介绍到这了,更多相关nginx获取真实ip内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解如何通过nginx进行服务的负载均衡

    详解如何通过nginx进行服务的负载均衡

    负载均衡器可以将用户请求根据对应的负载均衡算法分发到应用集群中的一台服务器进行处理,本文主要为大家详细介绍了如何通过nginx进行服务的负载均衡,需要的可以参考下
    2023-11-11
  • nginx配置前端请求转发到指定的后端ip方式

    nginx配置前端请求转发到指定的后端ip方式

    文章主要解释了Nginx配置中如何通过location规则将前端静态资源和后端接口请求进行分流,并详细描述了请求转发到后端的具体过程,包括rewrite规则、代理协议设置、请求头透传、代理地址指定及失败重试机制等
    2026-05-05
  • Linux服务器下nginx的安全配置详解

    Linux服务器下nginx的安全配置详解

    本篇文章主要介绍了Linux服务器下nginx的安全配置详解,Nginx在很多高流量网站上得到了应用,有需要的朋友可了解一下。
    2016-10-10
  • nginx ssl免密码重启教程详解

    nginx ssl免密码重启教程详解

    这篇文章给大家介绍了nginx 如何启动以及nginx ssl 免密码重启 的方法,非常不错,具有参考借鉴价值,需要的朋友参考下吧
    2017-01-01
  • Nginx服务器配置文件完全解析

    Nginx服务器配置文件完全解析

    这篇文章主要介绍了Nginx服务器配置文件完全解析,Nginx的异步非阻塞特性使其拥有非常出色的性能,需要的朋友可以参考下
    2015-08-08
  • Dockerfile打包nginx镜像的实现步骤

    Dockerfile打包nginx镜像的实现步骤

    本文主要介绍了Dockerfile打包nginx镜像的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-10-10
  • nginx缓存页面后 串会话问题的解决方法

    nginx缓存页面后 串会话问题的解决方法

    nginx支持页面缓存,之前我的博客有介绍配置方案,昨天出了一个诡异的问题,别人的机器登录后,我的机器打开应用的首页会出现别人的用户信息,也就是说我的浏览器访问的应用会话其实是别人的会话
    2013-06-06
  • Nginx解决前后端分离架构下的Session共享的几种方法

    Nginx解决前后端分离架构下的Session共享的几种方法

    本文主要介绍了Nginx解决前后端分离架构下的Session共享的几种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2026-04-04
  • Nginx使用Lua模块实现WAF的原理解析

    Nginx使用Lua模块实现WAF的原理解析

    waf是通过执行一系列针对HTTP/HTTPS的安全策略来专门为Web应用提供保护的一款产品,本文重点给大家介绍Nginx使用Lua模块实现WAF的原理,需要的朋友参考下吧
    2021-09-09
  • Nginx请求访问控制实现方案

    Nginx请求访问控制实现方案

    Nginx并不直接实现漏桶算法或令牌桶算法,但这些算法在控制网络流量和请求速率方面非常有用,这些算法通常在网络编程、API服务、负载均衡等领域中使用,以确保系统的稳定性和性能,这篇文章给大家介绍Nginx请求访问控制实现方案,感兴趣的朋友跟随小编一起看看吧
    2024-05-05

最新评论