解决使用了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 相关文章推荐
destoon在各个服务器下设置URL Rewrite(伪静态)的方法
Jun 21 Servers
详解nginx location指令
Jan 18 Servers
Apache Hudi的多版本清理服务彻底讲解
Mar 31 Servers
为Centos安装指定版本的Docker
Apr 01 Servers
nginx配置之并发频次限制
Apr 18 Servers
Window server 2012 R2 AD域的组策略相关设置
Apr 28 Servers
Nginx 匹配方式
May 15 Servers
项目中Nginx多级代理是如何获取客户端的真实IP地址
May 30 Servers
如何让你的Nginx支持分布式追踪详解
Jul 07 Servers
zabbix 代理服务器的部署与 zabbix-snmp 监控问题
Jul 15 Servers
Nginx 502 bad gateway错误解决的九种方案及原因
Aug 14 Servers
修改Nginx配置返回指定content-type的方法
Sep 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
php中ob(Output Buffer 输出缓冲)函数使用方法
2007/07/21 PHP
PHP实现支持CURL字符串证书传输的方法
2019/03/23 PHP
将函数的实际参数转换成数组的方法
2010/01/25 Javascript
用jquery方法操作radio使其默认选项是否
2013/09/10 Javascript
原始的js代码和jquery对比体会
2013/09/10 Javascript
js添加绑定事件的方法
2016/05/15 Javascript
轻松掌握JavaScript中的Math object数学对象
2016/05/26 Javascript
JavaScript数组去重由慢到快由繁到简(优化篇)
2016/08/26 Javascript
Vuejs 组件——props数据传递的实例代码
2017/03/07 Javascript
详解React 在服务端渲染的实现
2017/11/16 Javascript
webpack4.x打包过程详解
2018/07/18 Javascript
一次微信小程序内地图的使用实战记录
2019/09/09 Javascript
[04:02]2014DOTA2国际邀请赛 BBC每日综述中国战队将再度登顶
2014/07/21 DOTA
Python中捕捉详细异常信息的代码示例
2014/09/18 Python
Python实现递归遍历文件夹并删除文件
2016/04/18 Python
python类的继承实例详解
2017/03/30 Python
恢复百度云盘本地误删的文件脚本(简单方法)
2017/10/21 Python
django 使用 request 获取浏览器发送的参数示例代码
2018/06/11 Python
对Python3中bytes和HexStr之间的转换详解
2018/12/04 Python
Python基于Logistic回归建模计算某银行在降低贷款拖欠率的数据示例
2019/01/23 Python
对Python中的条件判断、循环以及循环的终止方法详解
2019/02/08 Python
Python-while 计算100以内奇数和的方法
2019/06/11 Python
django使用admin站点上传图片的实例
2019/07/28 Python
python实现二分类的卡方分箱示例
2019/11/22 Python
美国当红的名品折扣网:Gilt Groupe
2016/08/15 全球购物
竞聘医务工作人员的自我评价分享
2013/11/04 职场文书
大学生自我鉴定评语
2014/01/27 职场文书
带刀到教室的检讨书
2014/10/04 职场文书
国庆节新闻稿
2015/07/17 职场文书
校友会致辞
2015/07/30 职场文书
导游词之天津古文化街
2019/11/09 职场文书
利用Python+OpenCV三步去除水印
2021/05/28 Python
Python实现学生管理系统(面向对象版)
2021/06/24 Python
Java Spring 控制反转(IOC)容器详解
2021/10/05 Java/Android
基于Python实现股票收益率分析
2022/04/02 Python
Win11电脑显示本地时间与服务器时间不一致怎么解决?
2022/04/05 数码科技