解决使用了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压力测试工具的安装使用
Mar 31 Servers
nginx服务器的下载安装与使用详解
Aug 02 Servers
Nginx工作模式及代理配置的使用细节
Mar 21 Servers
详解使用内网穿透工具Ngrok代理本地服务
Mar 31 Servers
Kubernetes中Deployment的升级与回滚
Apr 01 Servers
Tomcat执行startup.bat出现闪退的原因及解决办法
Apr 20 Servers
Windows Server 2008 修改远程登录端口以及配置防火墙
Apr 28 Servers
Windows server 2012搭建FTP服务器
Apr 29 Servers
WIN10使用IIS部署ftp服务器详细教程
Aug 05 Servers
Nginx跨域问题解析与解决
Aug 05 Servers
Windows Server 2016服务器用户管理及远程授权图文教程
Aug 14 Servers
windows server2012 R2下安装PaddleOCR服务的的详细步骤
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抓取https的内容的代码
2010/04/06 PHP
360搜索引擎自动收录php改写方案
2018/04/28 PHP
详解json在php中的应用
2018/09/30 PHP
firefox事件处理之自动查找event的函数(用于onclick=foo())
2010/08/05 Javascript
浏览器窗口加载和大小改变事件示例
2014/02/27 Javascript
JS判断浏览器是否支持某一个CSS3属性的方法
2014/10/17 Javascript
如何让你的Lightbox支持滚轮缩放及Base64图片
2014/12/04 Javascript
jQuery简单tab切换效果实现方法
2015/04/08 Javascript
浅谈javascript实现八大排序
2015/04/27 Javascript
js+html5绘制图片到canvas的方法
2015/06/05 Javascript
JavaScript实现跨浏览器的添加及删除事件绑定函数实例
2015/08/04 Javascript
js严格模式总结(分享)
2016/08/22 Javascript
学习掌握JavaScript中this的使用技巧
2016/08/29 Javascript
js数组与字符串常用方法总结
2017/01/13 Javascript
基于Angularjs+mybatis实现二级评论系统(仿简书)
2017/02/13 Javascript
Extjs gridpanel 中的checkbox(复选框)根据某行的条件不能选中的解决方法
2017/02/17 Javascript
JS实现批量上传文件并显示进度功能
2017/06/27 Javascript
Vue.js 通过jQuery ajax获取数据实现更新后重新渲染页面的方法
2018/08/09 jQuery
小程序实现层叠卡片滑动效果
2019/08/26 Javascript
JS在Array数组中按指定位置删除或添加元素对象方法示例
2019/11/19 Javascript
javascript实现切割轮播效果
2019/11/28 Javascript
JS画布动态实现黑客帝国背景效果
2020/11/08 Javascript
Python中文编码那些事
2014/06/25 Python
python基于隐马尔可夫模型实现中文拼音输入
2016/04/01 Python
Python基础学习之常见的内建函数整理
2017/09/06 Python
Python tkinter的grid布局及Text动态显示方法
2018/10/11 Python
Python零基础入门学习之输入与输出
2019/04/03 Python
python连接、操作mongodb数据库的方法实例详解
2019/09/11 Python
python next()和iter()函数原理解析
2020/02/07 Python
HTML5之SVG 2D入门3—文本与图像及渲染文本介绍
2013/01/30 HTML / CSS
荷兰之家英文站:Holland at Home
2016/10/26 全球购物
佳能法国商店:Canon法国
2019/02/14 全球购物
bonprix荷兰网上商店:便宜的服装、鞋子和家居用品
2020/07/04 全球购物
经典而简洁的婚礼主持词
2014/03/13 职场文书
妇联领导班子剖析材料
2014/08/21 职场文书
离婚协议书标准格式
2014/10/04 职场文书