解决使用了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域名转发https访问的实现
Mar 31 Servers
利用Nginx代理如何解决前端跨域问题详析
Apr 02 Servers
Apache POI的基本使用详解
Nov 07 Servers
Apache Hudi集成Spark SQL操作hide表
Mar 31 Servers
使用kubeadm命令行工具创建kubernetes集群
Mar 31 Servers
Windows Server 2012 R2 磁盘分区教程
Apr 29 Servers
使用 Docker Compose 构建复杂的多容器App
Apr 30 Servers
Linux磁盘管理方法介绍
Jun 01 Servers
Windows Server 2022 超融合部署(图文教程)
Jun 25 Servers
Linux中sftp常用命令整理
Jun 28 Servers
Nginx配置使用详解
Jul 07 Servers
ubuntu开机后ROS程序自启动问题
Dec 24 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的类树(支持无限分类)
2006/10/09 PHP
检查url链接是否已经有参数的php代码 添加 ? 或 &
2010/02/09 PHP
调试一段PHP程序时遇到的三个问题
2012/01/17 PHP
php获取随机数组列表的方法
2014/11/13 PHP
php防止用户重复提交表单
2015/11/02 PHP
PHP中的随机性 你觉得自己幸运吗?
2016/01/22 PHP
phpMyAdmin通过密码漏洞留后门文件
2018/11/20 PHP
基于jquery的一个拖拽到指定区域内的效果
2011/09/21 Javascript
jQuery结合PHP+MySQL实现二级联动下拉列表[实例]
2011/11/15 Javascript
Jquery 表单验证类介绍与实例
2013/06/09 Javascript
express的中间件cookieParser详解
2014/12/04 Javascript
DOM基础教程之使用DOM控制表单
2015/01/20 Javascript
jQuery右侧选项卡焦点图片轮播特效代码分享
2015/09/05 Javascript
jQuery实现iframe父窗体和子窗体的相互调用
2016/06/17 Javascript
AngularJS基础 ng-csp 指令详解
2016/08/01 Javascript
AngularJS入门教程之多视图切换用法示例
2016/11/02 Javascript
web 屏蔽BackSpace键实例代码
2016/12/24 Javascript
使用BootStrap实现表格隔行变色及hover变色并在需要时出现滚动条
2017/01/04 Javascript
vue实现菜单切换功能
2019/05/08 Javascript
js实现网页版贪吃蛇游戏
2020/02/22 Javascript
微信小程序实现列表的横向滑动方式
2020/07/15 Javascript
vue 虚拟DOM的原理
2020/10/03 Javascript
对python中dict和json的区别详解
2018/12/18 Python
python图片二值化提高识别率代码实例
2019/08/24 Python
Python 利用邮件系统完成远程控制电脑的实现(关机、重启等)
2019/11/19 Python
基于python实现ROC曲线绘制广场解析
2020/06/28 Python
Html5在手机端调用相机的方法实现
2020/05/13 HTML / CSS
HTML5 Blob对象的具体使用
2020/05/22 HTML / CSS
经典广告词大全
2014/03/14 职场文书
岗位廉洁从业承诺书
2014/03/28 职场文书
北京奥运会主题口号
2014/06/13 职场文书
新教师培训心得体会
2014/09/02 职场文书
五四青年节比赛演讲稿
2015/03/18 职场文书
婚庆开业庆典主持词
2015/06/30 职场文书
导游词之天津古文化街
2019/11/09 职场文书
Windows Server 2022 超融合部署(图文教程)
2022/06/25 Servers