解决使用了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对http请求处理的各个阶段详析
Mar 31 Servers
nginx 反向代理之 proxy_pass的实现
Mar 31 Servers
Apache Calcite 实现方言转换的代码
Apr 24 Servers
Nginx虚拟主机的配置步骤过程全解
Mar 31 Servers
nginx配置之并发频次限制
Apr 18 Servers
docker compose 部署 golang 的 Athens 私有代理问题
Apr 28 Servers
Tomcat弱口令复现及利用
May 06 Servers
tomcat下部署jenkins的方法
May 06 Servers
Linux磁盘管理方法介绍
Jun 01 Servers
Win2008系统搭建DHCP服务器
Jun 25 Servers
Linux中各个目录的作用与内容
Jun 28 Servers
Apache SkyWalking 监控 MySQL Server 实战解析
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.ini中文版(2)
2006/10/09 PHP
如何利用php array_multisort函数 对数据库结果进行复杂排序
2013/06/08 PHP
使用php判断服务器是否支持Gzip压缩功能
2013/09/24 PHP
在PHP程序中使用Rust扩展的方法
2015/07/03 PHP
PHP中的访问修饰符简单比较
2019/02/02 PHP
Laravel实现批量更新多条数据
2020/04/06 PHP
原生javascript兼容性测试实例
2013/07/01 Javascript
JS JSON对象转为字符串的简单实现方法
2013/11/18 Javascript
浅谈Javascript中substr和substring的区别
2015/09/30 Javascript
基于javascript实现表格的简单操作
2016/05/21 Javascript
Base64(二进制)图片编码解析及在各种浏览器的兼容性处理
2017/02/09 Javascript
前端构建工具之gulp的语法教程
2017/06/12 Javascript
vue滚动轴插件better-scroll使用详解
2017/10/17 Javascript
Vue2.0 给Tab标签页和页面切换过渡添加样式的方法
2018/03/13 Javascript
浅谈微信小程序flex布局基础
2018/09/10 Javascript
layui 实现表单和文件上传一起传到后台的例子
2019/09/16 Javascript
vue 实现tab切换保持数据状态
2020/07/21 Javascript
Python获取电脑硬件信息及状态的实现方法
2014/08/29 Python
Python中的is和==比较两个对象的两种方法
2017/09/06 Python
python中hashlib模块用法示例
2017/10/30 Python
Python 爬虫之Beautiful Soup模块使用指南
2018/07/05 Python
正确理解Python中if __name__ == '__main__'
2019/01/24 Python
浅谈python3.6的tkinter运行问题
2019/02/22 Python
Python3中urlencode和urldecode的用法详解
2019/07/23 Python
python用opencv 图像傅里叶变换
2021/01/04 Python
GNC健安喜官方海外旗舰店:美国著名保健品牌
2017/01/04 全球购物
Kiwi.com中国:找到特价机票并发现新目的地
2019/10/27 全球购物
远程学习的教学用品和家庭学习资源:Really Good Stuff
2020/04/27 全球购物
家长给幼儿园的表扬信
2014/01/09 职场文书
学生会竞选演讲稿学习部
2014/08/25 职场文书
群众路线教育实践活动个人对照检查材料
2014/09/22 职场文书
委托培训协议书
2014/11/17 职场文书
匿名信格式范文
2015/05/27 职场文书
小学思想品德教学反思
2016/02/24 职场文书
2016优秀教师先进个人事迹材料
2016/02/25 职场文书
python的列表生成式,生成器和generator对象你了解吗
2022/03/16 Python