解决使用了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 配置 proxy_pass 后 返回404问题
Mar 31 Servers
nginx 反向代理之 proxy_pass的实现
Mar 31 Servers
Nginx设置日志打印post请求参数的方法
Mar 31 Servers
Nginx实现高可用集群构建(Keepalived+Haproxy+Nginx)
May 27 Servers
图文详解Nginx版本平滑升级方案
Sep 15 Servers
使用 Apache Dubbo 实现远程通信(微服务架构)
Feb 12 Servers
nginx共享内存的机制详解
Mar 21 Servers
Windows server 2012 配置Telnet以及用法详解
Apr 28 Servers
Nginx利用Logrotate实现日志分割
May 20 Servers
关于windows server 2012 DC 环境 重启后蓝屏代码:0xc00002e2的问题
May 25 Servers
Zabbix对Kafka topic积压数据监控的问题(bug优化)
Jul 07 Servers
WIN10使用IIS部署ftp服务器详细教程
Aug 05 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处理excel cvs表格的方法实例介绍
2013/05/13 PHP
请离开include_once和require_once
2013/07/18 PHP
destoon供应信息title调用出公司名称的方法
2014/08/22 PHP
php实现文章置顶功能的方法
2016/10/20 PHP
jQuery 表单验证扩展(三)
2010/10/20 Javascript
$.getJSON在IE下失效的原因分析及解决方法
2013/06/16 Javascript
tangram框架响应式加载图片方法
2013/11/21 Javascript
javascript实现验证身份证号的有效性并提示
2015/04/30 Javascript
javascript电商网站抢购倒计时效果实现
2015/11/19 Javascript
javascript简单比较日期大小的方法
2016/01/05 Javascript
jQuery+css实现的时钟效果(兼容各浏览器)
2016/01/27 Javascript
如何解决IONIC页面底部被遮住无法向上滚动问题
2016/09/06 Javascript
js实现tab选项卡切换功能
2017/01/13 Javascript
javascript history对象详解
2017/02/09 Javascript
JavaScript实现简单精致的图片左右无缝滚动效果
2017/03/16 Javascript
JS简单实现数组去重的方法示例
2017/03/27 Javascript
Node.js使用Express.Router的方法
2017/11/14 Javascript
Javascript防止图片拉伸的自适应处理方法
2017/12/26 Javascript
JS运动特效之链式运动分析
2018/01/24 Javascript
基于vue2的canvas时钟倒计时组件步骤解析
2018/11/05 Javascript
JS删除对象中某一属性案例详解
2020/09/08 Javascript
[02:42]2014DOTA2国际邀请赛 三冰专访:我会打到Ti20
2014/07/13 DOTA
Python实现求解括号匹配问题的方法
2018/04/17 Python
Python scrapy增量爬取实例及实现过程解析
2019/12/24 Python
在tensorflow中实现屏蔽输出的log信息
2020/02/04 Python
HTML5实现桌面通知 提示功能
2017/10/11 HTML / CSS
HTML5中使用json对象的实例代码
2018/09/10 HTML / CSS
ghd澳大利亚官方网站:英国最受欢迎的美发工具品牌
2018/05/21 全球购物
美国尼曼百货官网:Neiman Marcus
2019/09/05 全球购物
怎样声明子类
2013/07/02 面试题
竞选部门副经理的自荐书范文
2014/02/11 职场文书
学校运动会报道稿
2014/09/23 职场文书
党的群众路线教育实践活动对照检查剖析材料
2014/10/09 职场文书
三八妇女节致辞
2015/07/31 职场文书
如何写好一份优秀的工作总结?
2019/06/21 职场文书
阿里云服务器(windows)手动部署FTP站点详细教程
2022/08/05 Servers