解决使用了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的rewrite模块详解
Mar 31 Servers
nginx 多个location转发任意请求或访问静态资源文件的实现
Mar 31 Servers
Nginx的反向代理实例详解
Mar 31 Servers
nginx+lua单机上万并发的实现
May 31 Servers
nginx反向代理配置去除前缀案例教程
Jul 26 Servers
Nginx工作模式及代理配置的使用细节
Mar 21 Servers
Apache Hudi数据布局黑科技降低一半查询时间
Mar 31 Servers
深入解析Apache Hudi内核文件标记机制
Mar 31 Servers
Tomcat starup.bat 脚本实现开机自启动
Apr 20 Servers
Tomcat弱口令复现及利用
May 06 Servers
nginx 配置缓存
May 11 Servers
Docker部署Mysql8的实现步骤
Jul 07 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
mysql中存储过程、函数的一些问题
2007/02/14 PHP
在MongoDB中模拟Auto Increment的php代码
2011/03/06 PHP
解析Win7 XAMPP apache无法启动的问题
2013/06/26 PHP
MongoDB在PHP中的常用操作小结
2014/02/20 PHP
基于CI框架的微信网页授权库示例
2016/11/25 PHP
php实现的redis缓存类定义与使用方法示例
2017/08/09 PHP
PHP 应用容器化以及部署方法
2018/02/12 PHP
PHP自定义函数实现assign()数组分配到模板及extract()变量分配到模板功能示例
2018/05/23 PHP
PHP+Oracle本地开发环境搭建方法详解
2019/04/01 PHP
js下用gb2312编码解码实现方法
2009/12/31 Javascript
打开新窗口关闭当前页面不弹出关闭提示js代码
2013/03/18 Javascript
document.addEventListener使用介绍
2014/03/07 Javascript
全面解析Bootstrap中scrollspy(滚动监听)的使用方法
2016/06/06 Javascript
js css实现垂直方向自适应的三角提示菜单
2016/06/26 Javascript
利用nvm管理多个版本的node.js与npm详解
2017/11/02 Javascript
在vue中安装使用vux的教程详解
2018/09/16 Javascript
d3绘制基本的柱形图的实现代码
2018/12/12 Javascript
JS实现的Object数组去重功能示例【数组成员为Object对象】
2019/02/01 Javascript
layui点击按钮页面会自动刷新的解决方案
2019/10/25 Javascript
浅谈Vue.use到底是什么鬼
2020/01/21 Javascript
微信小程序实现手指拖动选项排序
2020/04/22 Javascript
老生常谈Python之装饰器、迭代器和生成器
2017/07/26 Python
Python读取Json字典写入Excel表格的方法
2018/01/03 Python
Python 元类实例解析
2018/04/04 Python
对python函数签名的方法详解
2019/01/22 Python
python飞机大战pygame游戏背景设计详解
2019/12/17 Python
快时尚眼镜品牌,全国连锁眼镜店:LOHO眼镜生活
2018/10/08 全球购物
瑞典耳机品牌:URBANISTA
2019/12/03 全球购物
香港士多网上超级市场:Ztore
2021/01/09 全球购物
自考毕业自我鉴定范文
2013/10/27 职场文书
党员公开承诺书
2014/03/25 职场文书
《宿建德江》教学反思
2014/04/23 职场文书
数据保密承诺书
2014/06/03 职场文书
文化苦旅读书笔记
2015/06/29 职场文书
大学生社区义工服务心得体会
2016/01/22 职场文书
golang http使用踩过的坑与填坑指南
2021/04/27 Golang