解决使用了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 相关文章推荐
详解Apache SkyWalking 告警配置指南
Apr 22 Servers
nginx服务器的下载安装与使用详解
Aug 02 Servers
Nginx location 和 proxy_pass路径配置问题小结
Sep 04 Servers
Minikube搭建Kubernetes集群
Mar 31 Servers
Kubernetes控制节点的部署
Apr 01 Servers
Docker下安装Oracle19c
Apr 13 Servers
使用Nginx的访问日志统计PV与UV
May 06 Servers
Linux磁盘管理方法介绍
Jun 01 Servers
Windows Server 2022 超融合部署(图文教程)
Jun 25 Servers
Python安装及建立虚拟环境的完整步骤
Jun 25 Servers
windows10 家庭版下FTP服务器搭建教程
Aug 05 Servers
keepalived + nginx 实现高可用方案
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调用Webservice实例代码
2011/07/29 PHP
php通过文件头判断格式的方法
2016/05/28 PHP
PHP 匿名函数与注意事项详细介绍
2016/11/26 PHP
php实现的错误处理封装类实例
2017/06/20 PHP
PHP使用星号替代用户名手机和邮箱的实现代码
2018/02/07 PHP
一个符号插入器 中用到的js代码
2007/09/04 Javascript
理解Javascript_15_作用域分配与变量访问规则,再送个闭包
2010/10/20 Javascript
jquery实现marquee效果(文字或者图片的水平垂直滚动)
2013/01/07 Javascript
Javascript页面添加到收藏夹的简单方法
2013/08/07 Javascript
从jquery的过滤器.filter()方法想到的
2013/09/29 Javascript
jquery实现省市select下拉框的替换(示例代码)
2014/02/22 Javascript
js实现基于正则表达式的轻量提示插件
2015/08/29 Javascript
AngularJS基础 ng-mouseenter 指令示例代码
2016/08/02 Javascript
Node.js与MySQL交互操作及其注意事项
2016/10/05 Javascript
基于Bootstrap框架实现图片切换
2017/03/10 Javascript
Mongoose中document与object的区别示例详解
2017/09/18 Javascript
移动端H5页面返回并刷新页面(BFcache)的方法
2018/11/06 Javascript
[01:03:56]Mineski vs TNC 2018国际邀请赛淘汰赛BO1 8.21
2018/08/22 DOTA
python基础知识小结之集合
2015/11/25 Python
基于pandas数据样本行列选取的方法
2018/04/20 Python
Python读取YUV文件,并显示的方法
2018/12/04 Python
python-itchat 获取微信群用户信息的实例
2019/02/21 Python
Python批量删除只保留最近几天table的代码实例
2019/04/01 Python
如何使用python进行pdf文件分割
2019/11/11 Python
详解Django3中直接添加Websockets方式
2020/02/12 Python
解决Tensorboard 不显示计算图graph的问题
2020/02/15 Python
python爬取抖音视频的实例分析
2021/01/19 Python
Pamela Love官网:纽约设计师Pamela Love的精美、时尚和穿孔珠宝
2020/10/19 全球购物
测绘工程个人的自我评价
2013/11/23 职场文书
《绿色蝈蝈》教学反思
2014/03/02 职场文书
房屋买卖委托公证书
2014/04/08 职场文书
个人课题方案
2014/05/08 职场文书
小学生读书活动总结
2014/06/30 职场文书
工人先锋号事迹材料
2014/12/24 职场文书
教育读书笔记
2015/07/02 职场文书
如何书写邀请函?
2019/06/24 职场文书