解决使用了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 相关文章推荐
Nginx解决前端访问资源跨域问题的方法详解
Mar 31 Servers
扩展多台相同的Web服务器
Apr 01 Servers
JVM上高性能数据格式库包Apache Arrow入门和架构详解(Gkatziouras)
May 26 Servers
Nginx设置HTTPS的方法步骤 443证书配置方法
Mar 21 Servers
Apache Hudi的多版本清理服务彻底讲解
Mar 31 Servers
忘记Grafana不要紧2种Grafana重置admin密码方法详细步骤
Apr 07 Servers
nginx搭建NFS网络文件系统
Apr 14 Servers
nginx配置限速限流基于内置模块
May 02 Servers
Nginx 常用配置
May 15 Servers
设置IIS Express并发数
Jul 07 Servers
nginx访问报403错误的几种情况详解
Jul 23 Servers
Windows Server 2016服务器用户管理及远程授权图文教程
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
解析thinkphp中的M()与D()方法的区别
2013/06/22 PHP
通过PHP current函数获取未知字符键名数组第一个元素的值
2013/06/24 PHP
Yii配置文件用法详解
2014/12/04 PHP
php用户注册时常用的检验函数实例总结
2014/12/22 PHP
PHP正则匹配日期和时间(时间戳转换)的实例代码
2016/12/14 PHP
PHP获取日期对应星期、一周日期、星期开始与结束日期的方法
2018/06/22 PHP
php进程(线程)通信基础之System V共享内存简单实例分析
2019/11/09 PHP
用js判断页面刷新或关闭的方法(onbeforeunload与onunload事件)
2012/06/22 Javascript
jquery实现简单的拖拽效果实例兼容所有主流浏览器(优化篇)
2013/06/28 Javascript
jquery+ajax验证不通过也提交表单问题处理
2014/12/12 Javascript
javascript动态创建链接的方法
2015/05/13 Javascript
JavaScript截取、切割字符串的技巧
2016/01/07 Javascript
jQuery多个版本和其他js库冲突的解决方法
2016/08/11 Javascript
switch语句的妙用(必看篇)
2016/10/03 Javascript
ajax实现动态下拉框示例
2017/01/10 Javascript
使用JavaScript实现点击循环切换图片效果
2017/09/03 Javascript
vue使用keep-alive实现数据缓存不刷新
2017/10/21 Javascript
详解Webstorm 新建.vue文件支持高亮vue语法和es6语法
2017/10/26 Javascript
vue中进入详情页记住滚动位置的方法(keep-alive)
2018/09/21 Javascript
史上最为详细的javascript继承(推荐)
2019/05/18 Javascript
原生js实现html手机端城市列表索引选择城市
2020/06/24 Javascript
Python使用poplib模块和smtplib模块收发电子邮件的教程
2016/07/02 Python
python+opencv实现动态物体追踪
2018/01/09 Python
Python如何爬取微信公众号文章和评论(基于 Fiddler 抓包分析)
2019/06/28 Python
CSS3属性box-sizing使用指南
2014/12/09 HTML / CSS
h5调用摄像头的实现方法
2016/06/01 HTML / CSS
荷兰网上买鞋:MooieSchoenen.nl
2017/09/12 全球购物
纽约海:Sea New York
2018/11/04 全球购物
俄罗斯电动工具和设备购物网站:Vseinstrumenti.ru
2020/11/12 全球购物
说好普通话圆梦你我他演讲稿
2014/09/21 职场文书
2014年乡镇人大工作总结
2014/11/25 职场文书
教师个人总结范文
2015/02/11 职场文书
南极大冒险观后感
2015/06/05 职场文书
付款证明格式范文
2015/06/19 职场文书
辞职报告(范文三篇)
2019/08/27 职场文书
Python一行代码实现自动发邮件功能
2021/05/30 Python