解决使用了nginx获取IP地址都是127.0.0.1 的问题


Posted in Servers onSeptember 25, 2021

获取ip工具

import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;

import javax.servlet.http.HttpServletRequest;

/**
 * IP地址
 *
 * @date 2020年3月6日 下午12:57:02
 */
@Slf4j
public class IPUtils {

    /**
     * 获取IP地址
     * 
     * 使用Nginx等反向代理软件, 则不能通过request.getRemoteAddr()获取IP地址
     * 如果使用了多级反向代理的话,X-Forwarded-For的值并不止一个,而是一串IP地址,X-Forwarded-For中第一个非unknown的有效IP字符串,则为真实IP地址
     */
    public static String getIpAddr(HttpServletRequest request) {
        String ip = null;
        try {
            ip = request.getHeader("x-forwarded-for");
            if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {
                ip = request.getHeader("Proxy-Client-IP");
            }
            if (StringUtils.isEmpty(ip) || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
                ip = request.getHeader("WL-Proxy-Client-IP");
            }
            if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {
                ip = request.getHeader("HTTP_CLIENT_IP");
            }
            if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {
                ip = request.getHeader("HTTP_X_FORWARDED_FOR");
            }
            if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {
                ip = request.getRemoteAddr();
            }
        } catch (Exception e) {
            log.error("IPUtils ERROR ", e);
        }
        
        //使用代理,则获取第一个IP地址
        if(StringUtils.isEmpty(ip) && ip.length() > 15) {
            if(ip.indexOf(",") > 0) {
                ip = ip.substring(0, ip.indexOf(","));
            }
        }
        
        return ip;
    }
    
}

如果你使用了nginx 则获取到的ip都会是127.0.0.1

在代理中加入如下配置proxy_set_header x-forwarded-for $remote_addr;

server {
        listen          80;
        server_name     api.qimen.pro;
        # 服务器文件上传大小限制
        client_max_body_size 10M;
        location / {
            proxy_pass   http://gymserver;
            proxy_set_header x-forwarded-for  $remote_addr;
        }
    }

到此这篇关于解决使用了nginx获取IP地址都是127.0.0.1 的问题的文章就介绍到这了,更多相关nginx获取IP地址问题内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Servers 相关文章推荐
使用Apache的rewrite
Mar 09 Servers
Nginx服务器如何设置url链接
Mar 31 Servers
Nginx配置80端口访问8080及项目名地址方法解析
Mar 31 Servers
小程序后台PHP版本部署运行 LNMP+WNMP
Apr 01 Servers
nginx刷新页面出现404解决方案(亲测有效)
Mar 18 Servers
Shell脚本一键安装Nginx服务自定义Nginx版本
Mar 20 Servers
Kubernetes关键组件与结构组成介绍
Mar 31 Servers
利用nginx搭建RTMP视频点播、直播、HLS服务器
May 25 Servers
nginx rewrite功能使用场景分析
May 30 Servers
Windows server 2012 NTP时间同步的实现
Jun 25 Servers
Nginx如何获取自定义请求header头和URL参数详解
Jul 23 Servers
ssh服务器拒绝了密码 请再试一次已解决(亲测有效)
Aug 14 Servers
关于nginx 实现jira反向代理的问题
Windows下用Nginx配置https服务器及反向代理的问题
Sep 25 #Servers
nginx安装以及配置的详细过程记录
Sep 15 #Servers
Nginx缓存设置案例详解
Sep 15 #Servers
图文详解Nginx版本平滑升级方案
Sep 15 #Servers
Nginx配置文件详解以及优化建议指南
Sep 15 #Servers
学习nginx基础知识
You might like
PHP MemCached高级缓存配置图文教程
2010/08/05 PHP
php比较两个绝对时间的大小
2014/01/31 PHP
javascript 流畅动画实现原理
2009/09/08 Javascript
JQuery AJAX提交中文乱码的解决方案
2010/07/02 Javascript
jquery下异步提交表单 异步跨域提交表单
2010/11/17 Javascript
jQuery插件开发基础简单介绍
2013/01/07 Javascript
node.js入门教程
2014/06/01 Javascript
jQuery中attr()和prop()在修改checked属性时的区别
2014/07/18 Javascript
深入分析jsonp协议原理
2015/09/26 Javascript
Bootstrap与KnockoutJs相结合实现分页效果实例详解
2016/05/03 Javascript
vue.js+boostrap项目实践(案例详解)
2016/09/21 Javascript
教你一步步用jQyery实现轮播器
2016/12/18 Javascript
jquery+ajax实现省市区三级联动效果简单示例
2017/01/04 Javascript
浅谈JS验证表单文本域输入空格的问题
2017/02/14 Javascript
javascript 判断当前浏览器版本并判断ie版本
2017/02/17 Javascript
jQuery 获取除某指定对象外的其他对象 ( :not() 与.not())
2018/10/10 jQuery
傻瓜式vuex语法糖kiss-vuex整理
2018/12/21 Javascript
vuex如何重置所有state(可定制)
2019/01/17 Javascript
vue踩坑记-在项目中安装依赖模块npm install报错
2019/04/02 Javascript
使用p5.js临摹动态图片
2019/11/04 Javascript
微信小程序实现搜索框功能及踩过的坑
2020/06/19 Javascript
Vue作用域插槽实现方法及作用详解
2020/07/08 Javascript
python 自动轨迹绘制的实例代码
2019/07/05 Python
Django 实现admin后台显示图片缩略图的例子
2019/07/28 Python
Python通过getattr函数获取对象的属性值
2020/10/16 Python
伊利莎白雅顿官网:Elizabeth Arden
2016/10/10 全球购物
全球高级音频和视频专家:HiDef Lifestyle
2019/08/02 全球购物
Street One瑞士:德国现代时装公司
2019/10/09 全球购物
师德演讲稿范文
2014/05/06 职场文书
2015年组织委员工作总结
2015/04/23 职场文书
2015暑期爱心支教策划书
2015/07/14 职场文书
大学生干部培训心得体会
2016/01/06 职场文书
《角的初步认识》教学反思
2016/02/17 职场文书
使用springboot暴露oracle数据接口的问题
2021/05/07 Oracle
JavaScript继承的三种方法实例
2021/05/12 Javascript
Android Flutter实现图片滑动切换效果
2022/04/07 Java/Android