解决使用了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 502 Bad Gateway错误原因及解决方案
Mar 31 Servers
使用 Apache 反向代理的设置技巧
Jan 18 Servers
Apache Hudi数据布局黑科技降低一半查询时间
Mar 31 Servers
使用kubeadm命令行工具创建kubernetes集群
Mar 31 Servers
Tomcat starup.bat 脚本实现开机自启动
Apr 20 Servers
配置nginx负载均衡
May 06 Servers
nginx 配置指令之location使用详解
May 25 Servers
nginx设置资源请求目录的方式详解
May 30 Servers
Nginx代理Redis哨兵主从配置的实现
Jul 15 Servers
Apache SkyWalking 监控 MySQL Server 实战解析
Sep 23 Servers
Shell中的单中括号和双中括号的用法详解
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
2020年4月放送决定!第2期TV动画《邪神酱飞踢》视觉图&主题曲情报公开!
2020/03/06 日漫
微信开发之网页授权获取用户信息(二)
2016/01/08 PHP
浅析Yii2缓存的使用
2016/05/10 PHP
PHP PDO和消息队列的个人理解与应用实例分析
2019/11/25 PHP
PHP程序守护进程化实现方法详解
2020/07/16 PHP
javascript html 静态页面传参数
2009/04/10 Javascript
在IE6下发生Internet Explorer cannot open the Internet site错误
2010/06/21 Javascript
javascript之querySelector和querySelectorAll使用介绍
2011/12/20 Javascript
javaScript(JS)替换节点实现思路介绍
2013/04/17 Javascript
Jquery插件编写简明教程
2014/03/25 Javascript
快速使用Bootstrap搭建传送带
2016/05/06 Javascript
Vuejs第十篇之vuejs父子组件通信
2016/09/06 Javascript
vue父子组件的嵌套的示例代码
2017/09/08 Javascript
JavaScript模板引擎原理与用法详解
2018/12/24 Javascript
vue-cli3.X快速创建项目的方法步骤
2019/11/14 Javascript
原生javascript制作贪吃蛇小游戏的方法分析
2020/02/26 Javascript
react 生命周期实例分析
2020/05/18 Javascript
[01:17:12]职来职往完美电竞专场
2014/09/18 DOTA
学习python处理python编码问题
2011/03/13 Python
Python Tkinter GUI编程入门介绍
2015/03/10 Python
Python文件读取的3种方法及路径转义
2015/06/21 Python
Python标准库sched模块使用指南
2017/07/06 Python
使用pip发布Python程序的方法步骤
2018/10/11 Python
Python 解决相对路径问题:"No such file or directory"
2020/06/05 Python
python连接手机自动搜集蚂蚁森林能量的实现代码
2021/02/24 Python
css3闪亮进度条效果实现思路及代码
2013/04/17 HTML / CSS
10分钟入门CSS3 Animation
2018/12/25 HTML / CSS
HTML5的表单(绝对特别强大的功能)使用示例
2013/06/20 HTML / CSS
日常奢侈品,轻松购物:Verishop
2019/08/20 全球购物
医学专业个人求职自荐信格式
2013/09/23 职场文书
《在家里》教后反思
2014/03/01 职场文书
电气自动化求职信
2014/06/24 职场文书
学习计划书怎么写
2014/09/15 职场文书
客服专员岗位职责
2015/02/10 职场文书
求职推荐信范文
2015/03/27 职场文书
2019毕业典礼主持词!
2019/07/05 职场文书