解决使用了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
Nginx代理同域名前后端分离项目的完整步骤
Mar 31 Servers
fastdfs+nginx集群搭建的实现
Mar 31 Servers
Apache Hudi的多版本清理服务彻底讲解
Mar 31 Servers
Tomcat用户管理的优化配置详解
Mar 31 Servers
centos7安装mysql5.7经验记录
May 02 Servers
Vscode中SSH插件如何远程连接Linux
May 02 Servers
nginx lua 操作 mysql
May 15 Servers
聊聊配置 Nginx 访问与错误日志的问题
May 25 Servers
Nginx安装配置详解
Jun 25 Servers
GPU服务器的多用户配置方法
Jul 07 Servers
apache虚拟主机配置的三种方式(小结)
Jul 23 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
?繁体转换的class
2006/10/09 PHP
使用PHP数组实现无限分类,不使用数据库,不使用递归.
2006/12/09 PHP
IIS环境下快速安装、配置和调试PHP5.2.0
2006/12/17 PHP
作为程序员必知的16个最佳PHP库
2015/12/09 PHP
yii2安装详细流程
2018/05/23 PHP
PHP hex2bin()函数用法讲解
2019/02/25 PHP
一样的table?不一样的table(可编辑状态table)
2012/09/19 Javascript
技术男用来对妹子表白的百度首页
2014/07/23 Javascript
extjs 如何给column 加上提示
2014/07/29 Javascript
为JS扩展Array.prototype.indexOf引发的问题及解决办法
2015/01/21 Javascript
javascript实现倒计时(精确到秒)
2015/06/26 Javascript
学习vue.js计算属性
2016/12/03 Javascript
深入理解jquery中的each用法
2016/12/14 Javascript
ES2015 Symbol 一种绝不重复的值
2016/12/25 Javascript
微信小程序 生命周期函数详解
2017/05/24 Javascript
Vue 莹石摄像头直播视频实例代码
2018/08/31 Javascript
详解微信小程序缓存--缓存时效性
2019/05/02 Javascript
详解微信小程序自定义组件的实现及数据交互
2019/07/22 Javascript
Vue中通过Vue.extend动态创建实例的方法
2019/08/13 Javascript
使用konva和vue-konva库实现拖拽滑块验证功能
2020/04/27 Javascript
vue-i18n实现中英文切换的方法
2020/07/06 Javascript
[02:40]DOTA2英雄基础教程 先知
2013/11/29 DOTA
[36:33]完美世界DOTA2联赛循环赛 Matador vs Forest 第一场 11.06
2020/11/06 DOTA
django基础之数据库操作方法(详解)
2017/05/24 Python
python 求定积分和不定积分示例
2019/11/20 Python
Ryderwear澳洲官网:澳大利亚高端健身训练装备品牌
2018/09/18 全球购物
JSF面试题:Jsf中的核心类用那些?有什么作用?LiftCycle六大生命周期是什么?
2014/07/17 面试题
Java方面的关于数组和继承的笔面试题
2015/09/18 面试题
事业单位公务员的职业生涯规划
2014/01/15 职场文书
读书演讲主持词
2014/03/18 职场文书
幼儿园课题方案
2014/06/09 职场文书
教师反腐倡廉演讲稿
2014/09/03 职场文书
2016廉政教育学习心得体会
2016/01/25 职场文书
教你如何使用Python Tkinter库制作记事本
2021/06/10 Python
Python编程编写完善的命令行工具
2021/09/15 Python
vue中div禁止点击事件的实现
2022/04/02 Vue.js